0
我嘗試從VB到C++傳遞一個雙精度數組(並希望最終以相反的方式)。從VB到C++傳遞double數組dll
我已經看了幾頁,這似乎表明,看起來有點像一個方法如下(但更多的參數傳遞在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 occurded。 exe「 再下來它說「這通常表明內存已損壞」。 PLSAFEARRAY的cDims,cbElements,cElements似乎都是腐敗的。
標量(整數和雙精度)都按照他們的要求進行。
任何人有任何想法?
(我得到了幫助: http://www.flipcode.com/archives/Interfacing_Visual_Basic_And_C.shtml)
粒子陣列=(雙*)((* arrayCppIn ) - > pvData); 你真的想要雙重間接到arrayCppIn或應該是pArray =(double *)((* arrayCppIn).pvData);或者pArray =(double *)(arrayCppIn-> pvData);我沒有任何類型文件在我面前,但這是一個猜測。您可能可以使用此行的調試器來確定您期望看到的內容。 – Sammy
不應該是'pArray =(double *)(arrayCppIn-> pvData);'。你的例子甚至不應該是可編譯的。 –
不需要,它需要所有的* s,否則它不會編譯。 AFAIU LPSAFEARRAY是一個指向SAFEARRAY –