| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > какой указать в определении callback процедуры |
| Автор: Гость_Вячеслав 20.3.2005, 18:28 |
| есть dll вней есть процедура у которой в качестве параметра есть callback процедура typedef void (__stdcall *init_t) (char*, char*, char*, char*, char*, int, int, int, lcbMsg_t); // вызываемая из dll процедура typedef void (__stdcall *lcbMsg_t) (char * tmsg, char * msg); // описание callback процедуры все бы хорошо но надо эту callback процедуру вызвать из MFC шаблона класса: class CTest3Dlg : public CDialog { public: CTest3Dlg(CWnd* pParent = NULL); void CALLBACK cbMsg(char *tmsg, char *msg) ; // <= callback процедура вот тут непонятно как описать в typedef void ... предыдущий вариант (typedef void (__stdcall *lcbMsg_t) (char * tmsg, char * msg)) компилятору не нравится |
| Автор: Олег М 20.3.2005, 18:46 | ||
Попробуй сделать её статической
Иначе не заработает, lcbMsg_t - это указатель на обычную функцияю, а не на метод класса, и шаблоны здесь не причём |
| Автор: Guest 21.3.2005, 10:12 | ||
code=cpp] void CALLBACK CTest3Dlg::cbMsg(char *tmsg, char *msg) { CListBox *MyList = (CListBox *) (this->GetDlgItem(IDC_LIST3)); MyList->AddString(msg); }[ [/code] Спасибо за оперативный ответ, сделала как Вы сказали, ругается в нутри самой функции на "this". Простите мня за мое ламерсво. Спасибо за помощь! |
| Автор: Олег М 21.3.2005, 10:19 | ||
Для статических функций this не определён. Единственное отличие статических методов от обычных функций состоит в том, что в них можно обращаться к приватным методам и данным своего класса, указатель на объект которого обычно передаётся в фунцию в виде какого-нибудь параметра |
| Автор: Guest 21.3.2005, 10:46 | ||
Еще раз извините за беспокойство. Спасибо за помощь!!! Остался еще один вопрос, какой тип имеет "this" |
| Автор: Guest 21.3.2005, 11:03 | ||
получается "замкнутый круг"
как быть ума не приложу |
| Автор: Олег М 21.3.2005, 11:04 | ||||
Указатель на класс, в методе которого ты находишься Добавлено @ 11:07 Нужно указать экземпляр класс CTest3Dlg для которго ты вызываешь getLst1() Сделай так
|
| Автор: Guest 21.3.2005, 11:15 |
| К сожалению 3 параметр добавить не могу! эта процедур будет вызваться из dll. В Dll описана эта callback процедура с двумя параметрами. |
| Автор: Олег М 21.3.2005, 11:37 | ||
Можно ещё так
|
| Автор: Guest 21.3.2005, 12:12 |
| компилятору все понравилось, но вот линковщик не удалость обмануть пишет ошибку: test3Dlg.obj : error LNK2001: unresolved external symbol "public: static class CTest3Dlg * CTest3Dlg::_dlg" (?_dlg@CTest3Dlg@@2PAV1@A) может с какой нибудь хитрой опцией надо компелить? |
| Автор: Олег М 21.3.2005, 12:15 | ||
CTest3Dlg::CTest3Dlg() и void CALLBACK CTest3Dlg::cbMsg(char *tmsg, char *msg) // обозвал как static Напиши точно так же как у меня |
| Автор: Guest 21.3.2005, 13:07 |
| УРА!!! УРА!!! УРА!!! ЗАРАБОТАЛО!!!!! СПАСИБО!!!!!!!!!!!!!!!! |