Извините, возможно, этот вариант также прост для программистов Delphi, но это не для меня. У меня есть функция библиотеки, которую я вызываю, и в основном она ест мой стек. Он делает это, нажимая переменные для функции в стек, но каким-то образом Delphi не выталкивает их из стека. Итак, после окончания функции я приземляюсь в никуда. Забавно, что я могу просто «поп-эакс» столько, сколько у меня есть параметров, и он работает. Может ли кто-нибудь пролить свет на то, что происходит? Рабочий код выглядит следующим образом:Вызов функции библиотеки съедает стек. Зачем?
function LoadIntoMemory(sdiPath: String): Integer;
var
retValue: Integer;
begin
retValue := file_open(PAnsichar(AnsiString(sdiPath)), @filedata, @filedatasize);
asm
pop eax
pop eax
pop eax
end;
end;
Как уже говорилось, не выскакивают из стека он выходит из строя.
функция сама по себе из C DLL, скомпонованы статически, как это:
function file_open (filename: PAnsichar; filedata: PPAnsichar; filedatasize: PLongInt): Integer; stdcall; external 'libLib';
ссылки динамически не изменяет поведение.
Я бы попробовать "Cdecl". Не уверен, что это поможет, потому что порядок переменных изменится. – Arkady