Из приложения c (VS2008, Win) я вызываю функцию в dll, написанной на Delphi в Borland. Функция работает, но после каждого вызова я получаю эту ошибку: «Значение ESP не было должным образом сохранено при вызове функции […]», что означает, что мое соглашение о вызовах неверно. Я не знаю Delphi и у меня нет полного кода dll, но я считаю, что это функция Delphi:
function translate(file1, file2: PChar):PChar; stdcall;
...
Result:=PChar(c);
end;
exports
translate;
Соответствующая часть в c:
typedef char*(__stdcall *translate)(char*, char*);
translate MyTranslate;
...
MyTranslate = (translate)GetProcAddress(dll, "translate");
char* result = (*MyTranslate)(file1, file2);
Вместо __stdcall в c выше, я пробовал __cdecl и __fastcall, но я всегда получаю сообщение ESP. Кроме того, в коде функции Dephi функция, кажется, возвращает char *, но dll-документ говорит, что возвращает «true» или «false» (?). Таким образом, в c вместо «typedef char * ...» я пробовал «typedef BOOL ...»: тем не менее, я получаю сообщение ESP. Я знаю, что могу подавить сообщение в разделе «Базовые проверки времени выполнения» (см. здесь ), но я предпочел бы получить правильный синтаксис вызова. DLL сжимается с помощью UPX, но я не уверен, что это актуально (как я уже сказал, сама функция работает).