社区
VB基础类
帖子详情
函数声明
nbabest23
2009-08-06 03:54:24
VC++ 生成了个DLL sha.dll
函数形式是 void Meid_To_pESN(char Meid[32] ,char pESN[32])
如果我想使用VB调用这个函数 改怎么声明呢,在线等待
...全文
232
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语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明。
函数声明
(Declaration),就是告诉编译器我要使用这个函数,你现在没有找到它的定义不要紧,请不要报错,稍后我会把定义补上。
函数声明
的格式非常简单,相当于去掉函数定义中的函数体,并在最后加上分号;,如下所示: dataType functi...
C语言
函数声明
函数与调用它的函数(即主调函数)不在同一文件中,或者函数定义的位置在主调函数之后,则必须在调用此函数之前对被调用的函数作声明。 所谓
函数声明
,就是在函数尚在未定义的情况下,事先将该函数的有关信息通知编译系统,相当于告诉编译器,函数在后面定义,以便使编译能正常进行。 #include <stdio.h> extern int add(int x, int y); // 函数的声明,分...
C语言的
函数声明
C语言的函数定义和
函数声明
C语言不同于Java语言,在Java语言中,在一个类中,定义函数/方法后,在调用时不需要声明。在C语言中定义函数后,在使用前,需要在main函数前进行声明,否则会报错。 #include <stdio.h> #include <stdlib.h> #include <string.h> void PrintArr(int* arr, int size) { for (int i = 0; i < size;i++) { print
易语言源码易语言嵌入汇编模拟按键模块源码
易语言源码易语言嵌入汇编模拟按键模块源码
stm32单片机项目资料课程设计文档C语言程序代码原理图电路PCB实例230个Proteus仿真原理图
stm32单片机项目资料课程设计文档C语言程序代码原理图电路PCB实例230个Proteus仿真原理图
VB基础类
7,788
社区成员
197,583
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章