Я разрабатываю патч для старого приложения, у владельцев которого больше нет кода src.
Я внедряю dll в .exe целевого приложения перед его main ().Эта dll устанавливает патчи, которые я сделал.
Приложение имеет пользовательский тип C ++ (класс или структуру), похожий на менеджер шрифтов чертежа, в котором есть функции, которые мне нужно вызывать через некоторые из этих патчей.
Обычно я называю эти "родные" функции-члены созданием функции-оболочки, которая вызывает встроенную функцию-член через asm inline.Я делаю это потому, что не могу понять, как это сделать с помощью указателей на функции C ++.
Я снова пытаюсь сделать это лучше, чем создавать множество раздутых оболочек функций.На этот раз я пытаюсь использовать класс / структуру в качестве виртуальной оболочки этого собственного типа, но мне кажется, что мне не хватает чего-то связанного с синтаксисом указателя на функцию, который я не могу понять.
Этопример того, что я пытаюсь сделать:
/* NC for Native Class */
class NC_FontDevice
{
public:
typedef void(NC_FontDevice::*_UseTexturesTransparency)();
_UseTexturesTransparency *UseTexturesTransparency = reinterpret_cast<_UseTexturesTransparency*>(0x635FD0);
private:
NC_FontDevice(){}
};
NC_FontDevice* GetFontDevice()
{
NC_FontDevice* lpFontDevice = nullptr;
/*
This asm inline block is here to show more or less what I do in those wrappers I told.
I know this can be converted to a simple function pointer.
*/
__asm
{
mov eax, 0x0041FE10
call eax
mov lpFontDevice, eax
}
return lpFontDevice;
}
void foo()
{
auto lpFontDevice = GetFontDevice();
// Here I get and "identifier X is undefined"
(lpFontDevice->**UseTexturesTransparency)();
}
Если понятно, чего я хочу, есть ли лучший способ добиться этого, кроме обёрток функций?
Спасибо завперед.