gpt4 book ai didi

Delphi、OleVariant 作为输出参数

转载 作者:行者123 更新时间:2023-12-03 15:58:08 30 4
gpt4 key购买 nike

我有一个第三方 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 中却出现访问冲突。

在另一端,我看到 ActiveX 控件创建了 8 字节数据(通过查看 DLL 的跟踪)。

请多多指教。谢谢。

附加信息:我用的是德尔福XE5。这是导入的函数原型(prototype):

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;

最佳答案

已部分解决:仅当我在 Debug模式下运行应用程序时,它才会崩溃。如果我通过双击运行 EXE,那么应用程序将正常运行,不会出现任何错误。我不知道是什么原因导致了这个问题,但我将继续该项目,因为这是一个很大的障碍。也许一些Delphi大师可以给出更多解释。

关于Delphi、OleVariant 作为输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549858/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com