Есть некоторый класс. Как получить указатель на func1? Код (Text): class Class { private: void func1(int a) { a++; } public: void func2() { void *p; p = (void*)func1; p = (void*)this->func1; } }; В итоге ошибки: E:\VC6\progs\temps\temp8\main.cpp(19) : error C2440: 'type cast' : cannot convert from 'void (__thiscall Class::* )(int)' to 'void *' There is no context in which this conversion is possible E:\VC6\progs\temps\temp8\main.cpp(20) : error C2440: 'type cast' : cannot convert from 'void (__thiscall Class::* )(int)' to 'void *' There is no context in which this conversion is possible
Либо указатель на статическую функцию, либо указатель на член (void Class::*pFunc1(int) = &Class::func1; this->*pFunc1(0); )
Посчитать offset вызова надо. Указатель нужно получить на саму функцию. хотя, можно и на член сласса + разименование. Ещё момент. Такая штука срабатывает нормально, компилятор не жалуется. DBG_PRINT("%08X",this->func1);
А в чём разница? В том, что функция может быть статической и класс может вообще не содержать указателя на неё? В любом случае нужен указатель на саму функцию.
Quark Разница в том, что набор функций только один, а объектов класса может быть сколько угодно. Функции и объекты хранятся в разных, независимых местах. Одно из другого получить нельзя. Указатель на функцию это &Class::func1
(unsigned long)&SetHook::HookCode - (unsigned long)pOrigFunction - 10; z:\mysource\commerce\keylogger\hook_ws2\inc.h(54) : error C2440: 'type cast' : cannot convert from 'int (__thiscall SetHook::* )(void)' to 'unsigned long'
Все верно, c-cast не умеет преобразовывать указатели на функции в интежеры. Преобразовывай в const char*, через const void*.