Я пытаюсь вызвать функцию DLL (через GetProcAddress и т. Д.) Из C, используя компилятор lcc.Функция вызывается, и все идет хорошо, но похоже, что вершина стека повреждена.Я пытался поиграть с соглашениями о вызовах (__stdcall / __cdecl), но это не помогло.
К сожалению, у меня нет доступа к коду dll, и мне приходится использовать компилятор lcc.
Я обнаружил, что этот простой хак позволяет избежать повреждения стека:
void foo(params)
{
int dummy;
dll_foo(params);
}
Здесь dll_foo - указатель, возвращаемый GetProcAddress, а стек как бы защищен фиктивной переменной.Таким образом, поврежден не указатель стека, а данные в верхней части стека.Это работает следующим образом, но я хотел бы знать причину повреждения.
Есть идеи?
UPD: Как уже было сказано в комментариях, вот фактические типы функций:
typedef unsigned char (CALLBACK Tfr)(unsigned char);
typedef void (CALLBACK Tfw)(unsigned char,unsigned char);
typedef int (CALLBACK Tfs)(int);
typedef void (CALLBACK Tfwf)(int*,int);
Все они показывают похожее поведение.
К сожалению, присоединить отладчик не так просто, так как код компилируется и запускается Matlab с использованием компилятора LCC, и естьнет поддержки отладки.Возможно, мне придется воспроизвести эту проблему в автономной конфигурации, но это не так просто сделать.