からエクスポート機能を呼び出すことができません。私のDelphi XEを使用して、私は次のセットアップました:はBPL
両方MYDLL.DLLとPackage1.bpl(ランタイムパッケージ)は
Unit3.pasが含まれていますunit Unit3;
interface
implementation
uses Dialogs;
procedure TestProc(const S: string); stdcall;
begin
MessageDlg(S, mtInformation, [mbOK], 0);
end;
exports TestProc;
end.
ケース1:
procedure TestProc(const S: string); stdcall; external 'mydll.dll';
procedure TForm1.Button3Click(Sender: TObject);
begin
TestProc('Button3');
end;
ケース2:
procedure TestProc(const S: string); stdcall; external 'Package1.bpl';
procedure TForm1.Button3Click(Sender: TObject);
begin
TestProc('Button3');
end;
ケース3:3渡さしかしケース2がます
procedure TForm1.Button3Click(Sender: TObject);
var H: THandle;
P: procedure(const S: string); stdcall;
begin
H := LoadPackage('Package1.bpl');
try
@P := GetProcAddress(H, PChar('TestProc'));
if Assigned(P) then
P('Button3');
finally
UnloadPackage(H);
end;
end;
ケース1とケースアクセス違反を発生させます。
以下のように私の質問は、
1ケース2はサポートされていませんか?
2.ケース3を除いて、Case1と同様のPackage1.bplからTestProcを呼び出すことはありますか?
ありがとうございます。 1回目の解決策では、2回目のボタンをクリックするとアクセス違反が発生しますが、2回目の解決策は何回ボタンをクリックしても問題ありません。 – lmengyew
@lmengyew私は最初の解決策を削除します。 'LoadPackage'行でアクセス違反例外が発生しました。これは、パッケージがすでに呼び出されているために読み込まれたためです。 – RRUZ