我用VC编写了一个简单的DLL,导出函数如下:
extern "C" __declspec(dllexport) int SUM(int * a,int n)
{
int sum = 0;
for(int i = 0; i < n; i ++)
sum += a[i];
return sum;
}然后在VB中进行调用,如下:
Private Declare Function SUM Lib "test" (ByRef a() As Long, ByVal n As Long) As LongPrivate Sub Command1_Click()
Dim a(3) As Long
Dim n As Longa(0) = 0
a(1) = 1
a(2) = 2
a(3) = 3
n = 4
MsgBox (SUM(a, n))
End Sub但结果总是莫名其妙,请问各位高手错在何处?
extern "C" __declspec(dllexport) int SUM(int * a,int n)
{
int sum = 0;
for(int i = 0; i < n; i ++)
sum += a[i];
return sum;
}然后在VB中进行调用,如下:
Private Declare Function SUM Lib "test" (ByRef a() As Long, ByVal n As Long) As LongPrivate Sub Command1_Click()
Dim a(3) As Long
Dim n As Longa(0) = 0
a(1) = 1
a(2) = 2
a(3) = 3
n = 4
MsgBox (SUM(a, n))
End Sub但结果总是莫名其妙,请问各位高手错在何处?
(ByVal a As Long, ByVal b As Long) As LongSub MyTest()
Dim a(3) As Long
a(0) = 1
a(1) = 2
a(2) = 3
a(3) = 4
MsgBox fnSum(VarPtr(a(0)), 4)
End Sub你要取第一个数组元素的地址,直接用ByRef a()是不可以的。
fnSum(a(0), 4)
不知我说的是否正确?
而且我很孤陋寡闻,竟不知VB中还有SafeArray,敬请ruihuahan指教!
所有参与我问题的朋友一并谢了!!!