vc dll 傳遞 數組給 vb,求 vb聲明

shakoe 2010-11-11 09:54:43
請教大家一個問題

vc dll聲明'void FindBorder(void* buffer1);

buff1是vc傳給 vb的 short 數組~ vb裡面怎麼聲明啊


我是這樣的,不知道對哇
dim buf3() as integer
ReDim buf3(1000) As integer

Call FindBorder( buf3(0))

Public Declare Function FindBorder Lib "MathLib.dll" ( ByRef buf3 As Integer)
...全文
65 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzhgb 2010-11-13
  • 打赏
  • 举报
回复
Public Declare Function FindBorder Lib "MathLib.dll" ( ByRef buf3 As any)

vb:call FindBorder(a(0))
wjcemachangkong 2010-11-12
  • 打赏
  • 举报
回复
补充,
如果vb声明里是ByVal DataArray As long
那么在vb里调用api函数时要应该这样:i = fnTestArray(VarPtr(lenarray(0)), 2)
wjcemachangkong 2010-11-12
  • 打赏
  • 举报
回复
VC DLL 里的声明如下(__declspec(dllimport)用宏替换):
__declspec(dllimport) int __stdcall fnTestArray(int* data,UINT size)
{
if (size==0) return 0;
int s=0;
s=data[0]+data[1];
return s;
}
VB 里声明如下:
Private Declare Function fnTestArray Lib "TestVBDLL" (DataArray As Any, _
ByVal ArraySize As Integer,) As Integer
Private Sub Command1_Click()
Dim lenarray(1) As Long
Dim i As Integer
lenarray(0) = 11
lenarray(1) = 7
i = fnTestArray(lenarray(0), 2)
MsgBox i
End Sub

在VB里声明时,第一个参数是as any 类型的,最好换成如下声明:ByVal DataArray As long
你的VB API 声明里用的是ByRef,类型却是as integer,完全错误啊。
我就不在众关公面前舞刀了,请楼主多搜些VB,VC间传递参数的资料看看
shakoe 2010-11-12
  • 打赏
  • 举报
回复
自己顶,求高手
shakoe 2010-11-11
  • 打赏
  • 举报
回复
vc dll 裡面傳遞一個數組給 vb ,難道一定要使用 “安全數組”?
shakoe 2010-11-11
  • 打赏
  • 举报
回复
樓上回了我2個帖子了,灰常感謝 :)
咸清 2010-11-11
  • 打赏
  • 举报
回复
语句格式为:Declare Sub 过程名Lib [ Alias " 别名]([ByVal 参数AS类型]),或为Declare Function函数名Lib [Alias " 别名]([ByVal 参数AS类型])AS类型

Integer 最好换成Long
楼下的,我说的对吧?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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