Название: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 15, 2010, 15:08 Значит есть некий код с использованием RasApi для устаноления удаленного соединения...
Код: qint32 MainWindow::connectGPRS(QString connectionName) там где отмечено красным шрифтом, у меня при компиляции говорит Код: : error: lvalue required as unary '&' operand есть ссылка на инфу где на Делфи реализована... http://forum.sources.ru/index.php?showtopic=30572#04 (http://forum.sources.ru/index.php?showtopic=30572#04) до меня туга доходит... помогите плизз... Название: Re: Реализация RasCallBack функции...??? Отправлено: zenden от Июня 15, 2010, 15:34 пишите &slot_GPRS_timer без круглых скобочек
Кстати , функция, указатель на которую вы передаете должна быть либо глобальной, либо статической Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 15, 2010, 15:41 Код: public slots: Код: res=RasDial(0,0,&RDP,0,&slot_GPRS_timer,&HRC); что не получается ... :(при компиляции выдает... modules\classes\mainwindow.cpp:180: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&MainWindow::slot_GPRS_timer' modules\classes\mainwindow.cpp:180: error: cannot convert 'void (MainWindow::*)()' to 'void*' for argument '5' to 'DWORD RasDialW(tagRASDIALEXTENSIONS*, const WCHAR*, tagRASDIALPARAMSW*, DWORD, void*, HRASCONN__**)' Название: Re: Реализация RasCallBack функции...??? Отправлено: BRE от Июня 15, 2010, 16:01 Убери ее из секции slots.
Код
Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 17, 2010, 07:14 modules\classes\mainwindow.cpp:180: error: invalid conversion from 'void (*)()' to 'void*' modules\classes\mainwindow.cpp:180: error: initializing argument 5 of 'DWORD RasDialW(tagRASDIALEXTENSIONS*, const WCHAR*, tagRASDIALPARAMSW*, DWORD, void*, HRASCONN__**)' ??? Название: Re: Реализация RasCallBack функции...??? Отправлено: BRE от Июня 17, 2010, 08:28 Код
Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 17, 2010, 09:05 так тоже ошибку выдает...
error: cannot convert 'void (MainWindow::*)()' to 'void*' for argument '5' to 'DWORD RasDialW(tagRASDIALEXTENSIONS*, const WCHAR*, tagRASDIALPARAMSW*, DWORD, void*, HRASCONN__**)' Я тут сюда зашел... http://bcbjournal.org/articles/vol3/9903/Using_RAS__part_1.htm?PHPSESSID=38ce55d5b68379366f93e5b6e6f7ed65 (http://bcbjournal.org/articles/vol3/9903/Using_RAS__part_1.htm?PHPSESSID=38ce55d5b68379366f93e5b6e6f7ed65) он делает следующее... Код: void WINAPI MainWindow::RasCallback(HRASCONN hrasconn, а потом ... Код:
говорит.. error: cannot convert 'void (MainWindow::*)(HRASCONN__*, UINT, RASCONNSTATE, DWORD, DWORD)' to 'void*' for argument '5' to 'DWORD RasDialW(tagRASDIALEXTENSIONS*, const WCHAR*, tagRASDIALPARAMSW*, DWORD, void*, HRASCONN__**)' как мне это дело декларировать у себя правильно... ??? Название: Re: Реализация RasCallBack функции...??? Отправлено: Nimbus от Июня 17, 2010, 09:38 Честно, не пользовался коллбэком в Qt ещё пока ни разу.
Вам же нужно передать указатель на функцию, не так ли? По-моему здесь не нужно использовать ни скобок, ни операции извлечения адреса, а лишь имя функции. И да, лучше её убрать из слотов. Можете создать указатель типа void (*pslot_GPRS_timer)() = slot_GPRS_timer; И уже pslot_GPRS_timer передать в функцию. Хотя, тут возможно понадобится ещё добавлять что-то типа _cdecl _stdcall Название: Re: Реализация RasCallBack функции...??? Отправлено: BRE от Июня 17, 2010, 09:55 Покажи как декларирован RasDial.
Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 17, 2010, 12:32 Код: #ifdef Q_OS_WIN32 .h Код: private: .cpp Код: void WINAPI MainWindow::RasCallback(HRASCONN hrasconn, Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 17, 2010, 12:35 Вот сюда глянте пожалуйста... как в Билдере реализовано...
http://bcbjournal.org/articles/vol3/9903/Using_RAS__part_1.htm?PHPSESSID=38ce55d5b68379366f93e5b6e6f7ed65 (http://bcbjournal.org/articles/vol3/9903/Using_RAS__part_1.htm?PHPSESSID=38ce55d5b68379366f93e5b6e6f7ed65) Название: Re: Реализация RasCallBack функции...??? Отправлено: BRE от Июня 17, 2010, 14:46 RasDial ждет void*
Код
Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 17, 2010, 15:40 Когда делаю так...
в .cpp Код: static void MainWindow::RasCallback(HRASCONN hrasconn, компилятор говорит.. Код: error: cannot declare member function 'static void MainWindow::RasCallback(HRASCONN__*, UINT, RASCONNSTATE, DWORD, DWORD)' to have static linkage когда делаю так... в .cpp Код: void MainWindow::RasCallback(HRASCONN hrasconn, при запуске прога отваливается... ??? Название: Re: Реализация RasCallBack функции...??? Отправлено: BRE от Июня 17, 2010, 15:50 В .cpp не нужно писать static!
Код
static нужно писать только в .h в описании класса. Почитай что нибудь по C++. ;) Название: Re: Реализация RasCallBack функции...??? Отправлено: zoro86 от Июня 17, 2010, 16:07 Вы правы за не имением кое каких понятий в с++ делаю методом тыка...
Ну я в начале так и сделал потом когда прога велетела я прописал static в .cpp... думал прокатит ;D ща вроде понял почему вылетает... сделал следующее... .h Код: static void WINAPI RasCallback(HRASCONN hrasconn, .cpp Код: void WINAPI MainWindow::RasCallback(HRASCONN hrasconn, ща заработала... прикольная штука... все события выдает и как надо работает... Спасибо BRE тема закрыта |