我有一个第三方ActiveX控件,我导入到我的应用程序。 其中一个函数导入为:
function GenerateMACClearIVSync(const KeyName: WideString;
out MacBytes: OleVariant): Integer;
它的作用是计算某个8字节值并将其存储到" MacBytes"变量。 但是,我遇到了这个函数调用的问题,因为它给了我访问冲突。
这是我尝试的代码:
var i: integer;
MacBytes: OleVariant;
begin
MacBytes := VarArrayCreate([0, 7], varByte);
i := GenerateMACClearIVSync('MMM22', MacBytes);
end;
我希望MacBytes充满8个字节的数据,但我在Delphi中得到了Access Violation。
另一方面,我看到ActiveX控件创建了8字节数据(通过查看DLL的跟踪)。
请指教。感谢。
其他信息: 我使用的是Delphi XE5。这是导入的函数原型:
GenerateMACClearIVSync(BSTR KeyName, VARIANT* MacBytes,long* pVal)
这就是他们所说的:
VARIANT macResult; long length = GenerateMACClearIVSync(EncKey, &macResult)
当我将ActiveX导入Delphi时,我得到包含此声明的... _ TLB.pas文件:
IKXSDMCtrl = interface(IDispatch)
...
function GenerateMACClearIVSync(const KeyName: WideString; out MacBytes: OleVariant): Integer; safecall;
....
end;
然后,再进一步:
IKXSDMCtrlDisp = dispinterface(IDispatch)
...
function GenerateMACClearIVSync(const KeyName: WideString; out MacBytes: OleVariant): Integer; dispid 13;
....
end;
进一步向下:
TKXSDMCtrl = class(TOleControl)
...
function GenerateMACClearIVSync(const KeyName: WideString; out MacBytes: OleVariant): Integer;
...
end
最后:
function TKXSDMCtrl.GenerateMACSync(const KeyName: WideString; out MacBytes: OleVariant): Integer;
begin
Result := DefaultInterface.GenerateMACClearIVSync(KeyName, MacBytes);
end;
答案 0 :(得分:1)
部分解决了:只有在调试模式下运行应用程序时崩溃才会崩溃。如果我通过双击运行EXE,那么应用程序正常运行而没有任何错误。 我不知道是什么原因引起了这个问题,但我会继续这个项目,因为这是一个很大的阻碍。也许一些德尔福大师可以提供更多解释。