| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2172 人关注过本帖
标题:关于调用dll的传值问题
取消只看楼主 加入收藏
pengzhanggui
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:161
专家分:344
注 册:2015-7-20
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:4 
关于调用dll的传值问题
dll中某个函数定义如下:

基本信息读取函数
BOOL WINAPI ReadBasicInfo(int  iNo, char* respBuf, int* iLength );
参数:
        iNo:所读记录序号(取值范围1~11)
        respBuf:读取内容返回值(此字符串数组长度必须大于0x28即40个字节)
        iLength:返回值长度(不大于0x28)
返回值:
TRUE表示读取成功,FALSE表示读取失败

其中,respBuf iLength  这两个结果是要传回到VB中,那么vb该怎么写啊?
搜索更多相关主题的帖子: 字符串 记录 信息 
2016-10-31 16:49
pengzhanggui
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:161
专家分:344
注 册:2015-7-20
收藏
得分:0 
回复 3楼 风吹过b
请问下代码怎么写呢?

来找我试试看
2016-11-01 08:19
pengzhanggui
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:161
专家分:344
注 册:2015-7-20
收藏
得分:0 
回复 5楼 风吹过b
这种写法能够返回 respbuf,ilength 的结果吗?
我测试过,返回的结果是空的。

来找我试试看
2016-11-01 09:45
pengzhanggui
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:161
专家分:344
注 册:2015-7-20
收藏
得分:0 
回复 7楼 风吹过b
按地址传递,即byref ,会报错: .....内存不能为written...
按值传递,即byval,也会报错:.......内存不能为read...

来找我试试看
2016-11-01 10:58
pengzhanggui
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:161
专家分:344
注 册:2015-7-20
收藏
得分:0 
回复 10楼 xzlxzlxzl
已测试ok,分享一下,整个dll需要注意的是char* 指针类型(传地址还是传值的问题)

方法1(传地址):
private function ReadBasicInfo lib "user.dll"(byval ino as long,byref respBuf as byte,byref iLength as long) as boolean 'api声明部分
dim ino as long,iLength as long
dim respBuf(1 to 40) as byte
ReadBasicInfo(ino,respbuf(1),ilength)
respbuf(1)获得的地址位置,后续要得到地址对应的值的时候,需要使用
结果=StrConv(Mid(respBuf, 1, iLength / 2), vbUnicode)

方法2(传值):
private function ReadBasicInfo lib "user.dll"(byval ino as long,byval respBuf as string,byref iLength as long) as boolean 'api声明部分
dim ino as long,iLength as long
dim respBuf as string
ReadBasicInfo(ino,respbuf,ilength)

[此贴子已经被作者于2016-11-2 08:14编辑过]


来找我试试看
2016-11-02 07:56
快速回复:关于调用dll的传值问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012364 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved