Страница: 1 |
Страница: 1 |
Вопрос: Си
Добавлено: 09.10.05 09:40
Автор вопроса: Progos | Web-сайт:
Можно ли как-то взять адрес функции из класса.
Пример
{
example();
long WProc(HWND P1,UINT P2,WPARAM P3,LPARAM P4);
virtual ~example();
};
....
long ProcAdr;
ProcAdr=SetWindowLong(hWnd, GWL_WNDPROC,(LONG)WProc);
Выскакивает ошибка, типа нельзя перевести в лонг.
Для функций вне классов работает :(
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 09.10.05 15:05
Учить азы.
Функции классов имеют дополнительный параметр this, и потому их сигнатура не совпадает с таковой у модульных функций. Поэтому же их нельзя указывать в качестве callback для API.
Номер ответа: 2
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #2
Добавлено: 09.10.05 15:11
То есть их адрес вообще нельзя узнать?
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 09.10.05 16:41
Можно, но зачем он тебе?
{
public:
int bar(){return 0;};
};
int main(int argc, char* argv[]
{
printf ("%u\n",&foo::bar);
return 0;
}
Номер ответа: 4
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #4
Добавлено: 09.10.05 16:46
Спасибо
Номер ответа: 5
Автор ответа:
Progos
ICQ: 311715784
Вопросов: 39
Ответов: 157
Web-сайт:
Профиль | | #5
Добавлено: 09.10.05 17:44
Я разобрался!
Оказывается - можно.
Вот код.
char* a;long origProc;
a=garbagestring(32);
sprintf (a,"%d",&Class::Proc);
origProc=StrToInt;
CallWindowProcA((WNDPROC)origProc, 0, 0,0,0);
MessageBox(0,a,0,0);
Номер ответа: 6
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #6
Добавлено: 09.10.05 18:27
И изнутри класса тоже можно передавать его, только функция должна иметь атрибут static.
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 09.10.05 21:35
Угу...
Только раз уж она static, то проще сделать её в модуле и не страдать фигнёй с &class::func...
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 10.10.05 05:46
В случае инкапсуляции окна в класс вынесение оконной процедуры из класса является маст даем с точки зрения архитектуры, лучше применить грязный хак