社区
VB基础类
帖子详情
函数声明
nbabest23
2009-08-06 03:54:24
VC++ 生成了个DLL sha.dll
函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32])
如果我想使用VB调用这个函数 改怎么声明呢,在线等待
...全文
164
21
打赏
收藏
函数声明
VC++ 生成了个DLL sha.dll 函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32]) 如果我想使用VB调用这个函数 改怎么声明呢,在线等待
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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++ primer第五版第6章答案
2. **未定义返回类型**:
函数声明
或定义时遗漏了返回类型。 3. **函数体语法错误**:如缺失花括号 `{}`。 ### 知识点三:递归函数实现阶乘计算 #### 示例代码 ```cpp int fact(int n) { int val = 1; for (int ...
(推荐)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 *...
函数声明
与函数表达式
函数声明
与函数表达式 定义一个函数的方法主要有三种
函数声明
、函数表达式、new Function构造函数,
函数声明
与函数表达式定义的函数较为常用,构造函数的方式可以将字符串定义为函数
函数声明
函数声明
会将声明与...
c语言中
函数声明
的作用
在c语言中
函数声明
不是必须的,即使没有声明函数,gcc编译器也只是会提示警告。但是
函数声明
却是很有必要的。 那么
函数声明
到底有声明作用呢? 其实
函数声明
的作用是让编译器帮你检查你调用函数时有没有错误。比如...
VB基础类
7,785
社区成员
197,585
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章