Это не простая вещь, чтобы сделать. Во-первых, вам нужно объявить ваш указатель как указатель на функцию-член:
void (MYCLASS::*funcPtr)();
И вы бы позвонили через
(myClassInstance->*funcPtr)();
Тогда вам нужен какой-то способ сохранить значение там. Вы не можете привести char *
(или void *
) указатель на указатель на функцию-член. Вы должны будете использовать некоторую форму типа наказания.
Типичный способ - использовать memcpy
:
void *addr = (char *)&hDll + 0x101E07;
memcpy(&funcPtr, &addr, sizeof(void *));
Другая возможность, так как получение адреса функции-члена из DLL уже за линией для неопределенного поведения, возможно, использует объединение:
union MemFuncPtr {
void *addr;
void (MYCLASS::*memfun)();
// Can be expanded to include other member function pointer types if necessary
};
Тогда вы можете просто
MemFuncPtr mfp;
mfp.addr = (char *)&hDll + 0x101E07;
funcPtr = mfp.memfun;
Или вы можете попробовать очень некрасивый референтный бросок в левой части задания.
Существуют дополнительные возможные сложности, если функция, адрес которой вы получаете, является virtual
и myClassInstance
указывает на производный класс, или если задействовано множественное наследование.
Действуйте на свой страх и риск.