申し訳ありませんが、おそらくこれも Delphi プログラマーにとっては簡単なことですが、私にとってはそうではありません。呼び出しているライブラリ関数があり、基本的にスタックを消費します。これは、関数の変数をスタックにプッシュすることによって行われますが、どういうわけか、Delphi は変数をスタックからポップしません。そのため、関数が終了した後、私はどこにも着陸しません。おもしろいことに、パラメータの数だけ「pop eax」を実行でき、それが機能します。何が起こっているのかを明らかにできる人はいますか?作業コードは次のようになります。
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';
動的にリンクしても動作は変わりません。