我尝试将一组双打从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)
答案 0 :(得分:0)
感谢@Hans Passant的评论,答案是将VB中的函数声明为
Public Declare Function myfun Lib "mydll.dll" (<MarshalAs(UnmanagedType.SafeArray)> ByRef arrVBout() As Double) As Integer