我需要将一个空的变量数组传递给用C编写的DLL(并且在所有Windows版本上都可用),而C代码(我无法控制并且无法编辑)将填充变量的空数组。它的一些回报值。
基本上,当我尝试这个时 - 当它应该包含函数/子调用的结果时,ByRef数组总是空的(如果我在.NET中执行完全相同的操作,它可以工作)。
我想我需要做一个自定义声明,所以VB知道如何调用C函数,或者?
以下是C子/函数的声明方式。鉴于此,我需要做些什么才能确保C能够正确使用我的空数组,然后我就可以获得我的结果了?
HRESULT InvokeAction(
[in] BSTR bstrActionName,
[in] VARIANT varInActionArgs,
[in, out] VARIANT *pvarOutActionArgs,
[in, out] VARIANT *pvarRetVal
);
有关此功能的更多信息:http://msdn.microsoft.com/en-us/library/aa382237(VS.85).aspx
由于
答案 0 :(得分:3)
来自http://msdn.microsoft.com/en-us/library/aa381230(VS.85).aspx:
Dim returnVal
Dim outArgs(1)
Dim args(1)
args(0) = 3
returnVal = service.InvokeAction("GetTrackInfo", args, outArgs)
'return Val now contains the track length
'and outArgs(0) contains the track title
Dim emptyArgs(0)
returnVal = service.InvokeAction("Play", emptyArgs, emptyArgs)
'returnVal indicates if the action was successful
但是,从这个例子中可以看出你的服务和服务实例并不清楚。