函数声明

nbabest23 2009-08-06 03:54:24
VC++ 生成了个DLL sha.dll
函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32])
如果我想使用VB调用这个函数 改怎么声明呢,在线等待
...全文
156 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nbabest23 2009-08-10
  • 打赏
  • 举报
回复
谢谢你了,学会了不少东西 呵呵
捧剑者 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 nbabest23 的回复:]
但是VB中 是可以BYREF传递STRING型变量的啊
我用VB做过这样的DLL,设置一个BYREF型的STRING变量,用来返回函数结果描述
[/Quote]
那么C函数中的参数应该定义成BSTR*类型的才行。这里的状况比较多哦,一言难尽。
nbabest23 2009-08-10
  • 打赏
  • 举报
回复
但是VB中 是可以BYREF传递STRING型变量的啊
我用VB做过这样的DLL,设置一个BYREF型的STRING变量,用来返回函数结果描述
贝隆 2009-08-10
  • 打赏
  • 举报
回复
学习
捧剑者 2009-08-10
  • 打赏
  • 举报
回复
因为vb的string类型本身实质上就是一个指针,指向字符串的首地址。
程序运行是加载dll时,如果没有指明绝对路径,首先会在当前目录中寻找,然后到windows,system32等目录中查找,再到path环境变量所示的目录中寻找。如果把dll放在工程目录中,exe文件当然一下就找到dll了,如果在vb中运行程序,则当前目录是vb所在的目录,当然找不到dll了。
nbabest23 2009-08-10
  • 打赏
  • 举报
回复
上面的方法我试过了 可以得到正确的结果,但是请问 PESN为什么要以BYVAL方式传递呢
如果以BYREF传递就会报错,
而且我想多问一句,调用C的DLL时,为什么不生成EXE,调试的时候运行会报BAD DLL....的错误呢
3Q
捧剑者 2009-08-10
  • 打赏
  • 举报
回复
比如,如果C中是ANSI string则VB中要定义为string类型,并且以byval方式传递:
Dim M As String
Dim p As String
Declare Sub Meid_To_pESN Lib "sha.dll" (ByVal Meid As String, ByVal pESN As String)

Call Meid_To_pESN(M, p)
捧剑者 2009-08-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 nbabest23 的回复:]
生成EXE以后运行就没有错误了,但是不能得到正确的值啊
BYTE型数组传递成字符串 好像 就不是一对一的传递了,而是两个BYTE对应一个字符,要通过ASCILL码换算
[/Quote]关键看你的C程序对数组是怎么处理的,是当作数组呢,还是字符窜,还是unicode字符串。不同的方式vb中的声明也不同。
nbabest23 2009-08-10
  • 打赏
  • 举报
回复
生成EXE以后运行就没有错误了,但是不能得到正确的值啊
BYTE型数组传递成字符串 好像 就不是一对一的传递了,而是两个BYTE对应一个字符,要通过ASCILL码换算
nbabest23 2009-08-07
  • 打赏
  • 举报
回复
提示错误
compile error:
type mismath: array or user-defined type expected
捧剑者 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nbabest23 的回复:]
楼上的兄台,看来你还是吧VB VC弄的有点混淆了
VB中M,p不能代表一个数组吧?

[/Quote]
做实参时可以。
nbabest23 2009-08-07
  • 打赏
  • 举报
回复
楼上的兄台,看来你还是吧VB VC弄的有点混淆了
VB中M,p不能代表一个数组吧?
捧剑者 2009-08-07
  • 打赏
  • 举报
回复
最好能把你的代码详细贴上来。
捧剑者 2009-08-07
  • 打赏
  • 举报
回复
public M(0 To 31) As Byte
public p(0 To 31) As Byte
Declare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)

Call Meid_To_pESN(M, p)
捧剑者 2009-08-06
  • 打赏
  • 举报
回复
呵呵,不好意思。一时昏了头,拼错了一个单词,又和DELPHI搞混了。
捧剑者 2009-08-06
  • 打赏
  • 举报
回复
Dim M(0 To 31) As Byte
Dim p(0 To 31) As Byte
Declare Sub Meid_To_pESN Lib "sha.dll" (Meid() As Byte, pESN() As Byte)

Call Meid_To_pESN(M, p)
nbabest23 2009-08-06
  • 打赏
  • 举报
回复
声明就不对啊 代码复制上去直接就是红色的
捧剑者 2009-08-06
  • 打赏
  • 举报
回复
出了什么错?
nbabest23 2009-08-06
  • 打赏
  • 举报
回复
楼上的调用了不对啊。。
捧剑者 2009-08-06
  • 打赏
  • 举报
回复
Dim M(0 To 31) As Byte
Dim p(0 To 31) As Byte
Delclare Procedure Meid_To_pESN Lib "sha.dll" (Meid() As Byte,pESN() As Byte)

Call Meid_To_pESN(M,p)
加载更多回复(1)

7,764

社区成员

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

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