![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Гость_Вячеслав |
|
|||
|
Unregistered |
есть 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)) компилятору не нравится |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Попробуй сделать её статической
Иначе не заработает, lcbMsg_t - это указатель на обычную функцияю, а не на метод класса, и шаблоны здесь не причём |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
code=cpp] void CALLBACK CTest3Dlg::cbMsg(char *tmsg, char *msg) { CListBox *MyList = (CListBox *) (this->GetDlgItem(IDC_LIST3)); MyList->AddString(msg); }[ [/code] Спасибо за оперативный ответ, сделала как Вы сказали, ругается в нутри самой функции на "this". Простите мня за мое ламерсво. Спасибо за помощь! |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Для статических функций this не определён. Единственное отличие статических методов от обычных функций состоит в том, что в них можно обращаться к приватным методам и данным своего класса, указатель на объект которого обычно передаётся в фунцию в виде какого-нибудь параметра |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Еще раз извините за беспокойство. Спасибо за помощь!!! Остался еще один вопрос, какой тип имеет "this" |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
получается "замкнутый круг"
как быть ума не приложу |
|||
|
||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Указатель на класс, в методе которого ты находишься Добавлено @ 11:07 Нужно указать экземпляр класс CTest3Dlg для которго ты вызываешь getLst1() Сделай так
|
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
К сожалению 3 параметр добавить не могу!
эта процедур будет вызваться из dll. В Dll описана эта callback процедура с двумя параметрами. |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Можно ещё так
|
|||
|
||||
| Guest |
|
|||
|
Unregistered |
компилятору все понравилось, но вот линковщик не удалость обмануть пишет ошибку:
test3Dlg.obj : error LNK2001: unresolved external symbol "public: static class CTest3Dlg * CTest3Dlg::_dlg" (?_dlg@CTest3Dlg@@2PAV1@A) может с какой нибудь хитрой опцией надо компелить? |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
CTest3Dlg::CTest3Dlg() и void CALLBACK CTest3Dlg::cbMsg(char *tmsg, char *msg) // обозвал как static Напиши точно так же как у меня |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
УРА!!!
УРА!!! УРА!!! ЗАРАБОТАЛО!!!!! СПАСИБО!!!!!!!!!!!!!!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |