社区
VB基础类
帖子详情
函数声明
nbabest23
2009-08-06 03:54:24
VC++ 生成了个DLL sha.dll
函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32])
如果我想使用VB调用这个函数 改怎么声明呢,在线等待
...全文
197
21
打赏
收藏
函数声明
VC++ 生成了个DLL sha.dll 函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32]) 如果我想使用VB调用这个函数 改怎么声明呢,在线等待
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
最全的C和C++语言笔试面试题汇总
3. **
函数声明
为静态**:在模块内声明为静态的函数只能被本模块内的其他函数调用,这限制了函数的作用域。 #### 二、“引用”与指针的区别 1. **初始化**:引用必须在声明时初始化,而指针可以在任何时候初始化。 ...
c++ primer第五版第6章答案
2. **未定义返回类型**:
函数声明
或定义时遗漏了返回类型。 3. **函数体语法错误**:如缺失花括号 `{}`。 ### 知识点三:递归函数实现阶乘计算 #### 示例代码 ```cpp int fact(int n) { int val = 1; for (int ...
Call 和 Return 使用
在分析"PT.ASM" 文件时,你需要关注
函数声明
、参数传递、调用过程和返回行为的实现细节,这将有助于你提升对汇编语言的理解。同时,"FILE-ID.DIZ" 文件提供了额外的文档支持,确保了你能够正确地解读和使用这些汇编...
(推荐)Win32 API大全
1 DLL API的声明……………………………………………………………………………945 2 DLL API的调用……………………………………………………………………………947 附录2 在Delphi中直接调用Windows API……...
C/C++ 指针的13份资料
例如,`void (*func_ptr)(int)`声明了一个接受整型参数并无返回值的函数指针。 8. **动态内存管理**:通过`malloc()`和`calloc()`函数动态分配内存,`free()`函数释放内存。指针在此过程中扮演关键角色,如`int *...
VB基础类
7,788
社区成员
197,583
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章