VB向dll传递数组的问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 18:36:19
VB中代码:(在Excel里面写的)
Declare Function Cal Lib "cal.dll" (ByRef inarr As Double, ByVal num As Long, ByRef outarr As Double)

Sub Macro1()
Dim inarr(3) As Double, outarr(3) As Double
inarr(0) = 1
inarr(1) = 2
inarr(2) = 3
inarr(3) = 4.5

Call Cal(inarr(0), 4, outarr(0))
End sub

DLL中代码:
void _stdcall Cal(double *inarr, int num, double *outarr)
{
int nCount=num;
int i;
for(i=0;i<nCount;i++)
{
outarr[i]=inarr[i] * 2;
}
}

为什么一运行就崩溃??
dll是用VC写的,我的意思是哪里出了错?怎么才能把数组传进去?谢谢~~

把声明
Declare Function Cal Lib "cal.dll" (ByRef inarr As Double, ByVal num As Long, ByRef outarr As Double)
改成
Declare Function Cal Lib "cal.dll" (ByVal inarr As Double, ByVal num As Long, ByVal outarr As Double)
也就是说把两个byref改成byval就行了

这样虽然是用的byval但是传进去的依然是指针
你在C里对outarr数组的修改 在VB里也确实会被修改
具体为什么 我也不太清楚 可能得从编译原理的角度去解释
我这样做只是凭经验
因为我做过很多VC写的dll供VB调用的程序
你就这样改 听我的 没错的

dll不是vb写的 有可能不能直接调用啊 类型不匹配 加个错误处理就不会崩溃的