我在尝试为我的组件创建一个过程时遇到问题,该过程使用包含在 DLL (TExecute) 中的过程,该过程也需要在当前代码中进行声明。所以这个过程有一个指针作为参数来知道如何处理评估。以下代码可以正常工作,但我需要将过程 eval 放在组件内部才能使用该组件中的私有变量。工作代码如下,请注意在这种情况下 eval 过程是全局的。
TExecute = procedure(eval: pointer, var variableArray: double);cdecl
TMyComponent = Class(TComponent)
public
FHandle: THandle;
FExecute: TExecute;
procedure Calculate;
var
n: integer;
x: array of double;
procedure eval(var x: double);
implementation
procedure eval(var x:double);
var
mx: Array[0..200] of double absolute x;
begin
mx[0]:= 2*mx[0];
end;
TMyComponent.Calculate;
begin
FHandle:= LoadLibrary(.....);
FExecute:= GetProcAddress(FHandle, 'main');
n:=2;
setlength(x,n);
FExecute(@eval,x[0]);
end;
当我像这样将过程 eval 放入 TMyComponent 时遇到问题:
TExecute = procedure(eval: pointer, var variableArray: double);cdecl
TMyComponent = Class(TComponent)
public
FHandle: THandle;
FExecute: TExecute;
procedure Calculate;
procedure eval(var x: double);
var
n: integer;
x: array of double;
implementation
procedure TMyComponent.eval(var x:double);
var
mx: Array[0..200] of double absolute x;
begin
mx[0]:= 2*mx[0];
end;
TMyComponent.Calculate;
begin
FHandle:= LoadLibrary(.....);
FExecute:= GetProcAddress(FHandle, 'main');
n:=2;
setlength(fx,n);
FExecute(@TMyComponent.eval,x[0]);
end;
我知道该项目出现错误消息:0x65900381f 的访问冲突:地址 0x0000005c 的写入。进程停止。使用 Setp of Run 继续。
而且我对这个问题一无所知,我已经尝试改变几乎所有东西,但我没有得到解决方案。如果有人可以帮助我,我将不胜感激。