VB调用VC编写的DLL

阿木的汤 2002-12-19 11:06:54
我用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 Long

Private Sub Command1_Click()
Dim a(3) As Long
Dim n As Long

a(0) = 0
a(1) = 1
a(2) = 2
a(3) = 3
n = 4
MsgBox (SUM(a, n))
End Sub

但结果总是莫名其妙,请问各位高手错在何处?
...全文
23 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edward 2002-12-19
  • 打赏
  • 举报
回复
VB中的Array在内存的表现有一个头,表明这个Array的元素个数、上标、下标。所以要用下面的方法:

Private Declare Function fnSum Lib "yourlib.dll" _
(ByVal a As Long, ByVal b As Long) As Long

Sub 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()是不可以的。
ruihuahan 2002-12-19
  • 打赏
  • 举报
回复
VB的数组不能等同于VC的指针,在VC中使用VB的数组应该用SafeArray
阿木的汤 2002-12-19
  • 打赏
  • 举报
回复
上面的老兄说的很对,我试过了,但传递数组首地址应按如下写法:
fnSum(a(0), 4)
不知我说的是否正确?
而且我很孤陋寡闻,竟不知VB中还有SafeArray,敬请ruihuahan指教!
所有参与我问题的朋友一并谢了!!!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧