如何将数组(通过引用,在VB6中)传递给C \ C ++ * .dll子例程?

时间:2010-10-27 16:48:32

标签: c# .net c++ vb6 com-interop

我需要将一个空的变量数组传递给用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

由于

1 个答案:

答案 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

但是,从这个例子中可以看出你的服务和服务实例并不清楚。