求助:用VC++做的.dll文件在VB中调用时出现调用约定错误 点击:3093 | 回复:17



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-12-16 09:41:00
楼主
我在VC++中做的一个.dll急需在VB中调用,但是总出现调用约定错误,我检查了函数参数的个数和类型,但仍然不对,为什么?



剑工

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 1028回
  • 年度积分:0
  • 历史总积分:2548
  • 注册:2002年7月26日
发表于:2003-11-18 13:41:00
1楼
我可以帮你 13072014932

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-11-19 12:46:00
2楼
这是一个函数调用类型问题。 把你的VC函数原型及VB声明写出来。或许我可以帮你.

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-11-20 15:10:00
3楼
VC函数原型:extern "C" _declspec(dllexport) long CHE(long frame[],int n); VB声明:Declare Function CHE Lib "C:\win32dllCRC.dll" (frame() As Long, ByVal n As Integer) As Long 急切盼望您的答复,祝您好运!

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-11-20 16:44:00
4楼
VC函数原型:extern "C" _declspec(dllexport) long WINAPI CHE(long frame[],int n); VB不用改,

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-11-21 09:25:00
5楼
运行VB程序时提示找不到dll的入口点,好象将WINAPI当成函数名的一部分,而不认识函数CHE了.我的dll是用win32 dynamic-link library 做的.请问是怎么回事?

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-11-21 11:37:00
6楼
函数名称不对. 在你的VC程序中 def文件加入你的函数名称. 重新编译。

byh

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 21回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年5月23日
发表于:2003-11-24 10:01:00
7楼
真心的感谢您!祝您好人好梦。

byh

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 21回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年5月23日
发表于:2003-11-24 15:11:00
8楼
再打扰您一次,数组frame()中的数据传递的不对,好像没有传递到VC中,出了什么问题?

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-11-24 15:27:00
9楼
你VB的调用命令是否写成了 frame(0)

byh

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 21回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年5月23日
发表于:2003-11-24 16:53:00
10楼
是这样写的:Declare Function CHE Lib "C:\win32dllCRC.dll" (frame() As Long, ByVal n As Integer) As Long

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-11-24 17:05:00
11楼
调用写成 CHE frame(0),len 试试。 不行的话把程序发到 deng_lp@21cn.com

byh

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 21回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年5月23日
发表于:2003-11-24 17:06:00
12楼
是这样写的: frame(0) = &H1 frame(1) = &H6 frame(2) = &H0 frame(3) = &H7C frame(4) = &H0 frame(5) = &H3 r = CHE(frame, 6)

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-11-25 13:19:00
13楼
In Win32, long of C = 4 bytes, int of C = 4 bytes; Long of VB = 4 bytes, Integer of VB = 2 bytes.

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-11-26 08:09:00
14楼
VB程序 改为: Declare Function CHE Lib "C:\win32dllCRC.dll" (frame As Long, ByVal n As Integer) As Long call  CHE( frame(0),len)  试试。

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2003-12-01 10:54:00
15楼
程序已改好,并发出。 demo.exe.b ->demo.exe 收到没?

byh

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 21回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年5月23日
发表于:2003-12-01 13:38:00
16楼
已经收到!感激之情无以言表!非常非常感谢!

byh

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 21回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2003年5月23日
发表于:2003-12-16 09:41:00
17楼
再次的打扰您: 在VB中调用CRC(frame(0), 6)时,因为frame的个数不一定,因此6是一个整型变量,程序写成CRC(frame(0), n),(n是一个整型变量,赋给成一个经过计算后得出的整型值),计算出的值不对,6的位置只能写常数,怎么办? 另外,通过串口采集来的数据,其中有两个字节分别表示值的高字节和低字节,比如:H,L为字节型变量,H=&H3,L=&H25,要把它们转化成十进制的805,怎么转呢? 您的举手之劳对于我的确很重要,再次的感谢您!

热门招聘
相关主题

官方公众号

智造工程师