Я с помощью 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?
Спасибо за решение. 1-е решение повысит нарушение доступа, если нажать кнопку 2-го раза, но 2-е решение отлично работает независимо от того, сколько раз я нажимаю кнопку. – lmengyew
@lmengyew Я удаляю первое решение (и просто держу второе). исключение исключения доступа было поднято в строке 'LoadPackage', потому что пакет уже загружен во второй раз, который вы его вызываете. – RRUZ