имеет функцию, упрощенную ниже, который экспортируется из BPLВозвращаясь строкой из функции BPL
function DoA(amount: currency; var Info: string): Currency; stdcall;
begin
result := amount * 19;
Info:= 'Some Text about the result';
end;
его загруженного из основной программы с LoadPackage и GetProcAddress, который хорошо работает для других функций. , но это вызывает множество ошибок при его вызове;
БПЛ Используется с (упрощенный)
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 param является var и/или строкой?
Сообщение об ошибке
Проект Project1.exe поднял класс исключения EInvalidPointer с сообщением 'Invalid операции указателя'
благодаря
болееинформации> другая функция из того же BPL/устройство отлично работает
function DoB(amount: currency): Currency; stdcall;
result := amount * 19;
end;
Mad исключения>
класса исключений: EInvalidPointer сообщение исключения: Недопустимая операция указателя.
основной поток ($ 1b7c): 0040276f +013 Project1.exe Система @FreeMem 00404650 + 01c Project1.exe Система @LStrClr 00483814 + 15c Project1.exe Unit1 97 +11 TForm1.Button3Click 00462430 +064 Проект1 .exe управления TControl.Click 0045a870 + 01c Project1.exe StdCtrls TButton.Click
ваша сумма не имеет «вар» на нем – Treby
извините пример разве лучший плохого изменения его –