2013-12-08 18 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来表示意图给调用者。