2013-12-08 42 views
1

我想在一個免費的Pascal項目使用ActiveX對象時,從文檔我知道一個方法聲明爲使用在免費帕斯卡爾的ActiveX方法VARIANT *參數的

long Fetch(VARIANT* vValue) 

其中vVariant會調用後包含結果(整數或浮點值)。

的LazActiveX「導入類型庫」功能轉換這

_SomeApi = dispinterface 
    ['...'] 
    ... 
    function Fetch(vValue: OleVariant):Integer; 
    ... 
end; 

我正要OleVariant有點驚訝,因爲只有簡單數據類型應返回。當使用v:OleVariant調用Fetch(v)時,我還得到了EOleSysError(類型不匹配)。

任何人都可以向我解釋如何在TLB中正確聲明此方法或如何訪問數據?不幸的是,我沒有Fetch()的源碼,其中一些內容由NDA覆蓋...

+0

必須是OleVariant類型的輸出參數。不要相信進口商。自己做。但OleVariant是正確的。變體只包含簡單類型的事實並不改變其變體的事實。 –

+0

試試這個:function Fetch(vValue:^ TVarData):Integer; – yms

+0

不要相信進口商。相信Heffernan先生。使用「var」參數完成了這項工作,謝謝! – LeRookie

回答

3

導入過程導致錯誤的聲明。它應該是:

function Fetch(out vValue: OleVariant): Integer; 

如果semanics是OUT,而

function Fetch(var vValue: OleVariant): Integer; 

如果semanics是IN/OUT。

當然,其中任何一個都可以工作,但是您可以使用var或out來表示意圖給調用者。