Я использую Delphi XE, у меня есть следующие настройки:
Оба 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:
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 и Дело 3 прошло , но Дело 2 будет поднять нарушение доступа .
Мой вопрос, как показано ниже,
1.Случай 2 не поддерживается?
2.За исключением случая 3, есть ли способ вызвать TestProc из Package1.bpl, аналогичный Case1?