改一下声明,C里面传入指针的参数,VB里面用byref传入,类型为any
private declare function usb_relay_device_open_with_serial_number Lib“xx路径”(byref SerNum as any,byval lenth as long)as long接下来,C的char 其实就是字节数组。把VB的string转换成字节数组dim a() as byte
a = strconv("1234abcd" ,vbfromunicode)最后,把数组的第一个元素传递进去,其实DLL那边获得的就是这个数组在内存里的起始地址。也就是这个数组的指针。
dim return as long
return=usb_relay_device_open_with_serial_number(a(0) ,ubound(a)+1)
private declare function usb_relay_device_open_with_serial_number Lib“xx路径”(byref SerNum as any,byval lenth as long)as long接下来,C的char 其实就是字节数组。把VB的string转换成字节数组dim a() as byte
a = strconv("1234abcd" ,vbfromunicode)最后,把数组的第一个元素传递进去,其实DLL那边获得的就是这个数组在内存里的起始地址。也就是这个数组的指针。
dim return as long
return=usb_relay_device_open_with_serial_number(a(0) ,ubound(a)+1)
解决方案 »
- 有关Msgbox语句问题
- 下载到本地的Web页以Binary方式读入后怎样判断他是UTF-8还是GB2312编码的呢?
- Webbrowser控件在XP和WIN7下的问题
- 向大家请教个关于vb修改文件属性的问题
- 如何查询ado记录集中的数值型字段的小数位数是几位呀?我想根据小数点的位数用format(函数设置msflexgrid单元格的格式),谢谢.
- 怎么用VB代码实现DTS快速导数据
- MSFlexGrid和dbgrid控件的值怎么对齐?
- 使用SHFileOperation的问题,急急
- DLL 的问题
- 懂installshield安装的请进
- VB.net sql查询语句编写
- VB和access开发系统
比如函数:
void add (int a ,int b)
就无法在VB中调用
要改为:
void add _stdcall (int a ,int b)转自:
https://bbs.csdn.net/topics/350190581
第2楼;
引用成的函数声明是什么样子的?
引用成的函数声明是什么样子的?
引用成了两个函数。
1,初始化函数
在dll头文件中声明为:
int EXPORT_API usb_relay_init(void)
/*init the usb relay library
return 0 on success and-1 on failure*/
在vb中声明为
private declare function usb_relay_init lib."路径"()as long
2,第二个函数是扫描设备信息的,在另一个帖子里大神您回复过我,按照您的方法解决了。ps:如果要修改dll为stdcall方式,应该怎么修改,现在有.cpp、.h、.lib、.dll好几个文件,应该改哪个?
试试修改 .cpp、.h(再导出的函数名称前边加上_stdcall);
比如:
int _stdcall EXPORT_API usb_relay_device_open_with_serial_number(const char *serial_number,unsigned len);
.lib、.dll 是编译生成的文件,.dll是vb6实际用到的文件;因为我没有测试过,仅仅是看别人这么说的,所以也不太确定这个方法能达到效果;
你可以试一试,不行再想其它的办法;
cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。所不同的是,被调用函数本身不清理堆栈,调用者负责清理堆栈。
VB的调用方式是不自行清理堆栈的,其实WINDOWS API函数基本上都是stdcall。_cdecl是C和C++程序的缺省调用方式。
当我们遇到这样的函数如fprintf()它的参数是可变的,不定长的,被调用者事先无法知道参数的长度,事后的清除工作也无法正常的进行,因此,这种情况我们只能使用cdecl。
vb只用到了dll,dll没有改动,程序也就没有变化了。
vb只用到了dll,dll没有改动,程序也就没有变化了。
需要编译源代码为DLL;
就像VB6的生成EXE/DLL/OCX一样;
哪个是源代码?用什么软件编译?我这有厂家给的.dll,.h和.lab
哪个是源代码?用什么软件编译?我这有厂家给的.dll,.h和.lab
厂家说没说是否支持VB6调用?
厂家试验过,能用VB6调用吗?
是否可以让厂家给你个VB6调用的例子?
哪个是源代码?用什么软件编译?我这有厂家给的.dll,.h和.lab
厂家说没说是否支持VB6调用?
厂家试验过,能用VB6调用吗?
是否可以让厂家给你个VB6调用的例子?
商家转卖的一个小东西,联系不到厂家…
哪个是源代码?用什么软件编译?我这有厂家给的.dll,.h和.lab
厂家说没说是否支持VB6调用?
厂家试验过,能用VB6调用吗?
是否可以让厂家给你个VB6调用的例子?
商家转卖的一个小东西,联系不到厂家…
实在不行的话,你可以用VC的ATL工程包装一下,然后用VB6调用;
因为有可能这个API函数VB6没法直接调用;
方便的话我可以给你包装一下,不过你得把.H和.DLL发给我;
你可以用百度网盘,上传并共享,把地址贴在这里;
也可以把这几个文件打包发送到;
哪个是源代码?用什么软件编译?我这有厂家给的.dll,.h和.lab
厂家说没说是否支持VB6调用?
厂家试验过,能用VB6调用吗?
是否可以让厂家给你个VB6调用的例子?
商家转卖的一个小东西,联系不到厂家…
实在不行的话,你可以用VC的ATL工程包装一下,然后用VB6调用;
因为有可能这个API函数VB6没法直接调用;
方便的话我可以给你包装一下,不过你得把.H和.DLL发给我;
你可以用百度网盘,上传并共享,把地址贴在这里;
也可以把这几个文件打包发送到;
感谢感谢,已经发到邮箱了