2014-08-28 62 views
3

我有我導入到我的應用程序的第三方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; 
+0

更多信息:我使用Delphi XE5。 這裏是導入函數原型: GenerateMACClearIVSync(BSTR鍵名,VARIANT * MacBytes,長* PVAL) 這是怎麼稱呼它: VARIANT macResult; long length = GenerateMACClearIVSync(EncKey,&macResult); – Zoran 2014-08-28 13:31:43

+0

調用約定在哪裏?三個參數版本有什麼區別。我不禁感到你介紹的一些細節是錯誤的。 – 2014-08-28 14:12:52

+0

我所有的是一個ActiveX控件導入,然後Delphi生成... _ TLB.pas文件,其中還包含此: function GenerateMACSync(const KeyName:WideString; out MacBytes:OleVariant):Integer; safecall; – Zoran 2014-08-28 14:15:58

回答

1

明白了部分解決:只有當我在調試模式下的應用程序崩潰。如果我通過雙擊運行EXE,那麼應用程序可以正常運行而不會出現任何錯誤。 我不知道是什麼導致了這個問題,但我會繼續這個項目,因爲這是一個很大的障礙。也許一些德爾福的大師可以給出更多的解釋。

+0

我認爲這不是問題。我認爲你應該創建一個VarArray的VarVariant元素類型。 – 2014-08-28 17:16:26