有一个从 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 (用断点查看)
错误是否与作为 var 和/或字符串的 Info 参数有关?
错误消息是
Project Project1.exe 引发异常类 EInvalidPointer,并带有消息“无效指针操作”
谢谢
更多信息> 来自同一 bpl/unit 的另一个函数工作正常
function DoB(amount: currency): Currency; stdcall;
result := amount * 19;
end;
疯狂除外>
异常类:EInvalidPointer 异常消息:无效的指针操作。
主线程 ($1b7c): 0040276f +013 Project1.exe System @FreeMem 00404650 +01c Project1.exe System @LStrClr 00483814 +15c Project1.exe Unit1 97 +11 TForm1.Button3Click 00462430 +064 Project1.exe Controls TControl.Click 0045a870 + 01c Project1.exe StdCtrls TButton.Click