У меня есть следующий код:
typedef void * (__stdcall * call_generic)(...);
typedef void * (__stdcall * call_push2)(unsigned long,unsigned long);
void * pfunc;
// assume pfunc is a valid pointer to external function
// this is a logically correct way of calling, however this includes:
// add esp, 8
// after the call, and that breaks my stack.
((call_generic)pfunc)(1,1);
// however, if i use this call:
((call_push2)pfunc)(1,1);
// this does not happen and code works properly.
Трудно отслеживать все вызовы и подсчитывать аргументы вручную (впереди много таких вызовов), я бы предпочел макрос или что-то для этого, но с этой ошибкой это невозможно.
Есть ли решение? Есть ли другой способ создания типа call_generic
для таких вещей?
Я действительно не понимаю, почему именно он выполняет эту «очистку», но это сильно нарушает мой стек, вызывая потерю ранее определенных переменных.