vb调用vc写的dll的问题又来了。:( 还希望大家不吝赐教

bladeinside 2004-08-18 02:55:05
vc中函数原型
BOOL TV_GetSerial (char far *);
vb中声明
Private Declare Function TV_GetSerial Lib "usbid.dll" (ByRef Serial() As Byte) As Boolean
vb中调用
Dim Serial(1 To 20) As Byte
If itest.GetSerial(Serial()) <> 0 Then
MsgBox StrConv(Serial, vbUnicode)
End If

可却得到空值。。

谢谢大家来帮忙
...全文
116 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualvbjava 2004-08-20
  • 打赏
  • 举报
回复
Private Declare Function TV_GetSerial Lib "usbid.dll" (ByRef Serial As Byte) As Boolean
rainstormmaster 2004-08-19
  • 打赏
  • 举报
回复
我用copymemory的目的是取得字串,我假设你的函数的返回值是缓冲区内装载的字节数,但是看你的说明,copymemory就没必要用了
bladeinside 2004-08-19
  • 打赏
  • 举报
回复
今天急性肠炎...去医院输液去了
bladeinside 2004-08-18
  • 打赏
  • 举报
回复
非常感谢
of123()
rainstormmaster(暴风雨 v2.0)
这两天vb和vc之间调用的问题折腾我够戗。。。
请问有没有这方面的文档或者书可以系统的看一看?
bladeinside 2004-08-18
  • 打赏
  • 举报
回复
看错了。of123()的代码稍微有点问题
声明处还是用 rainstormmaster(暴风雨 v2.0)
Private Declare Function TV_GetSerial Lib "usbid.dll" (byval Serial as long) As Boolean

如果用
Private Declare Function TV_GetSerial Lib "usbid.dll" (ByRef Serial As Byte) As Boolean
出现overflow错误
bladeinside 2004-08-18
  • 打赏
  • 举报
回复
嘿嘿。我刚测试完。。
Dim Serial(1 To 20) As Byte
If itest.GetSerial(Serial(1)) <> 0 Then
MsgBox StrConv(Serial, vbUnicode)
End If

of123() 就写出正确答案了。。。佩服两位牛人。。
of123 2004-08-18
  • 打赏
  • 举报
回复
试试:
Private Declare Function TV_GetSerial Lib "usbid.dll" (ByRef Serial As Byte) As Boolean
vb中调用
Dim Serial(1 To 20) As Byte
If itest.GetSerial(Serial(1)) <> 0 Then
MsgBox StrConv(Serial, vbUnicode)
End If
bladeinside 2004-08-18
  • 打赏
  • 举报
回复
to:rainstormmaster(暴风雨 v2.0)
vc中函数原型
BOOL TV_GetSerial (char far *);

dim i as long
i=TV_GetSerial(varptr(Serial(1))) //根据vc中函数定义,得到的i值为0 或者1
If i> 0 Then
dim buff() as byte //
redim buff(i-1) //
copymemory buff(0),Serial(1),i //这几句要做什么呢?
//msdn:The CopyMemory function copies a block of memory
//from one location to another.

MsgBox StrConv(Serial, vbUnicode)
End If
rainstormmaster 2004-08-18
  • 打赏
  • 举报
回复
试试:

vb中声明
Private Declare Function TV_GetSerial Lib "usbid.dll" (byval Serial as long) As Boolean
vb中调用
Dim Serial(1 To 20) As Byte
dim i as long
i=GetSerial(varptr(Serial(1)))
If i> 0 Then
dim buff() as byte
redim buff(i-1)
copymemory buff(0),Serial(1),i
MsgBox StrConv(Serial, vbUnicode)
End If


bladeinside 2004-08-18
  • 打赏
  • 举报
回复
If itest.GetSerial(Serial()) <> 0 Then
--> If TV_GetSerial(Serial()) <> 0 then

上面写错了
bladeinside 2004-08-18
  • 打赏
  • 举报
回复
自己up一下
Caffy 2004-08-18
  • 打赏
  • 举报
回复
帮你up

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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