BPL からエクスポートされる関数 (以下に簡略化) を持っている
function DoA(amount: currency; var Info: string): Currency; stdcall;
begin
result := amount * 19;
Info:= 'Some Text about the result';
end;
LoadPackage を使用してメイン プログラムからロードされ、GetProcAddress は他の関数に対して正常に機能します。しかし、これは呼び出されたときに多くのエラーを引き起こします。
BPL とともに使用されます (簡略化)
bplhandle: HModule;
BPLDoA: function (amount: currency; var Info: string): Currency; stdcall;
intoStr : string;
.
begin
bplhandle:=LoadPackage('test.bpl');
if bplhandle <> 0 then
begin
@BPLDoA:=GetProcAddress(bplhandle,'DoA');
if assigned(BPLDoA) then
result := BPLDoA(123, intoStr);
end;
end;
プロシージャの最後に発生するように見える例外ですが、修正されたテキストは intoStr に返されます (ブレーク ポイントで表示)
エラーは、Info パラメータが var および/または文字列であることと関係がありますか?
エラーメッセージは
プロジェクト Project1.exe で例外クラス EInvalidPointer が発生し、「無効なポインター操作」というメッセージが表示されました
ありがとう
詳細 > 同じ bpl/ユニットからの別の機能は正常に動作します
function DoB(amount: currency): Currency; stdcall;
result := amount * 19;
end;
マッドエクセプト>
例外クラス: EInvalidPointer 例外メッセージ: 無効なポインタ操作です。
メイン スレッド ($1b7c): 0040276f +013 Project1.exe システム @FreeMem 00404650 +01c Project1.exe システム @LStrClr 00483814 +15c Project1.exe Unit1 97 +11 TForm1.Button3Click 00462430 +064 Project1.exe コントロール TControl.Click 0045a870 + 01c Project1.exe StdCtrls TButton.Click