我有我導入到我的應用程序的第三方ActiveX控件。 的功能之一是導入爲:德爾福,OleVariant作爲參數
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個字節的數據,而是我得到了德爾福訪問衝突。
另一方面,我看到ActiveX控件創建8字節數據(通過查看DLL的軌跡)。
請指教。謝謝。
附加信息: 我使用Delphi XE5。這裏是導入函數原型:
GenerateMACClearIVSync(BSTR KeyName, VARIANT* MacBytes,long* pVal)
這是怎麼稱呼它:
VARIANT macResult; long length = GenerateMACClearIVSync(EncKey, &macResult)
當我導入的ActiveX到德爾福我得到包含此聲明..._ 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;
更多信息:我使用Delphi XE5。 這裏是導入函數原型: GenerateMACClearIVSync(BSTR鍵名,VARIANT * MacBytes,長* PVAL) 這是怎麼稱呼它: VARIANT macResult; long length = GenerateMACClearIVSync(EncKey,&macResult); – Zoran 2014-08-28 13:31:43
調用約定在哪裏?三個參數版本有什麼區別。我不禁感到你介紹的一些細節是錯誤的。 – 2014-08-28 14:12:52
我所有的是一個ActiveX控件導入,然後Delphi生成... _ TLB.pas文件,其中還包含此: function GenerateMACSync(const KeyName:WideString; out MacBytes:OleVariant):Integer; safecall; – Zoran 2014-08-28 14:15:58