我有一个dll和一个库文件来使用DLL。在文件使用dll的函数
TOnPortStatusChanged = procedure (cardNo:integer; portNo:integer; newPortStatus:byte); stdcall;
TOnPortDataReady = procedure (cardNo:integer; portNo:integer; dataBuff:PByteArray; buffLen:integer); stdcall;
T_API_INIT_PARAMS = record
OnPortStatusChanged :TOnPortStatusChanged;
OnPortDataReady :TOnPortDataReady ;
end;
P_API_INIT_PARAMS = ^T_API_INIT_PARAMS ;
//....
//...
var
PR_Init: function (initParams: P_API_INIT_PARAMS):integer; stdcall;
,当我想在我的程序来使用这个功能,我的代码:
procedure PortStatusChanged(cardNo: integer; portNo: integer; newPortStatus: byte); stdcall;
begin
//...
end;
procedure TMainThread.CheckDevices;
var
vCount: integer;
initParams: T_API_INIT_PARAMS;
begin
initParams.OnPortStatusChanged := PortStatusChanged;
initParams.OnPortDataReady := nil;
vCount := PR_Init(@initParams);
这工作正常。但是我想在TMainThread类中使用PortStatusChanged过程。所以我写TMainThread类的程序,改变TOnPortStatusChanged类型这样的:
TOnPortStatusChanged = procedure (cardNo:integer; portNo:integer; newPortStatus:byte) of object; stdcall;
当我跑我这样的程序; PortStatusChanged在第一时间正常工作,但第二次出现访问冲突错误。
我在哪里犯错?
但我想,DLL会自动调用我的函数。那么如何检查指针指针呢? – SimaWB 2009-06-19 14:57:25