将vb中的double数组传递给c ++ dll

时间:2015-10-16 11:38:15

标签: c++ arrays vb.net

我尝试将一组双打从VB传递给C ++(希望最后反过来)。

我看了几个页面似乎表明一个看起来有点像下面的方法(但是在mydll.cpp中将更多参数传递给myfun): 在C ++(mydll.cpp)

extern __declspec(dllexport) int __stdcall myfun(LPSAFEARRAY FAR arrayCppIn)
{
  double *pArray;
  pArray = (double*)((*arrayCppIn)->pvData);
  double testvar = pArray[0]
}

这与VB代码(vbtestcppdll):

一起
Public Declare Function myfun Lib "mydll.dll" (ByRef arrVBout() As Double) As Integer

Dim result As Integer
Dim testarr = New Double {1.1, 2.5, 6}
result = myfun(testarr)

在调试模式(MSVS2013)中,一旦达到double testvar = pArray[0],我就会得到"未处理的类型' System.AxxessViolationException'发生在vbtestcppdll.exe" 更进一步说它"这通常表明记忆已经腐败"。 PLSAFEARRAY的cDims,cbElements,cElements似乎都是腐败的。

Scalars(整数和双数)都按照它们的要求进行。

任何人都有任何想法吗?

(我得到了帮助: http://www.flipcode.com/archives/Interfacing_Visual_Basic_And_C.shtml

1 个答案:

答案 0 :(得分:0)

感谢@Hans Passant的评论,答案是将VB中的函数声明为

Public Declare Function myfun Lib "mydll.dll" (<MarshalAs(UnmanagedType.SafeArray)> ByRef arrVBout() As Double) As Integer