最典型的VB调用动态库问题

zengJingSha2010 2009-11-24 09:22:17
现在有个C++B写的动态库,名叫Real3k3p.dll,里面封有一个函数JBC3K3P_Recvs,不知道在VB里怎么调用它,具体参数如下:
typedef struct _real_process_
{
__int64 card;//整型卡号
char szcard[16];//10字节长度字符串卡号,这个卡号是为了方便应用程序操作用的.
char sztime[16];//刷卡时间 格式 HH:NN:SS
char szdate[16];//刷卡日期 格式 YYYY-MM-DD
DWORD money,//消费金额,单位为(分). 这个金额是键盘输入的消费金额.
balance,//余额,单位为(分). 这个金额是给收费机LED显示用的.
type,//1-手动,自动消费. 2-请求卡片余额.
result,//给收费机的处理结果. 0-成功. >0失败,并在LED上显示Err1,值范围 0 - 19
record,//设备中的记录数.如果这个记录数不为0,表示设备中有脱机消费数据,需要用JBC3300_Record_id函数采集.
registry;//设备中的注册数.
}REAL_PROCESS, *pREAL_PROCESS;



DLL int WINAPI JBC3K3P_Recvs(pREAL_PROCESS p, char *ip, int &port);
/*
函数说明: 从收费机返回的实时消费数据.这个函数必须运行在程序的线程中,
因为我们采用的是堵塞网络通讯模式,在没有数据到达时该函数是挂起来的.

参数:
p - 请参考 struct _real_process_ 中的说明.
ip - 返回的收费机的IP地址.
port - 返回的收费机的端口号.

返回值:
= 0 成功
< 0 失败
*/
...全文
190 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2009-11-25
  • 打赏
  • 举报
回复
说了 int & 参数类型不支持,试什么试!
simon__sun 2009-11-24
  • 打赏
  • 举报
回复
试试这样可以吧,在模块中声明:
Declare Function JBC3K3P_Recvs Lib "Real3k3p.dll" _
(ByRef pReal_process As real_process, Byref ip As Byte, ByVal port As Long)


Type real_process
scard As Long
szcard(16) As Byte
sztiem(16) As Byte
szdate(16) As Byte
sMoney As Long
sType As Long
sResult As Long
sRecord As Long
sRegistry As Long
End Type
snowfirelove 2009-11-24
  • 打赏
  • 举报
回复
直接引用那个动态链接库不可以么?
Tiger_Zhao 2009-11-24
  • 打赏
  • 举报
回复
int & 参数类型不支持,应该转换成 int *。
如果不能修改原始 dll 就再做一个 dll 进行封装。
  • 打赏
  • 举报
回复
http://developer.weaseek.com/2008/0819/50026089_1.shtml

http://www.google.cn/search?hl=zh-CN&source=hp&q=vb+%E8%B0%83%E7%94%A8%E5%8A%A8%E6%80%81%E5%BA%93&aq=1&oq=vb+%E8%B0%83%E7%94%A8%E5%8A%A8%E6%80%81
  • 打赏
  • 举报
回复
Private Declare Function JBC3K3P_Recvs Lib "Real3k3p.dll" ( ..)

Type real_process
...
End Type

待续....
chenhui530 2009-11-24
  • 打赏
  • 举报
回复
Private Declare Function JBC3K3P_Recvs Lib "Real3k3p.dll" (ByVal p As Long,byval ip as string,byval port as long) As Long

或者全部都声明成long也行
baoyufu 2009-11-24
  • 打赏
  • 举报
回复
sf 帮顶
孤独剑_LPZ 2009-11-24
  • 打赏
  • 举报
回复
路过,帮顶
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zengjingsha2010 的回复:]
引用 13 楼 simon__sun 的回复:
VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试

参数换来换去都不对,int64不知道用什么好
[/Quote]

double ...try this
zengJingSha2010 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 simon__sun 的回复:]
VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试
[/Quote]
参数换来换去都不对,int64不知道用什么好
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zengjingsha2010 的回复:]
引用 3 楼 liuxiaoyi666 的回复:
  Private  Declare  Function  JBC3K3P_Recvs Lib  "Real3k3p.dll"  ( ..)

Type real_process
...
End Type
 
待续....


等你待续......
[/Quote]

本来想google一下各个字段的类型的...不过后面的人比我要有经验...我一会儿琢磨琢磨大家的回答

再给些思路
simon__sun 2009-11-24
  • 打赏
  • 举报
回复
VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试
Tiger_Zhao 2009-11-24
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090112/17/8baefb97-5891-46ef-a2be-b02f4d7f0ef9.html
zengJingSha2010 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuxiaoyi666 的回复:]
  Private  Declare  Function  JBC3K3P_Recvs Lib  "Real3k3p.dll"  ( ..)

Type real_process
...
End Type
 
待续....

[/Quote]
等你待续......
zengJingSha2010 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 simon__sun 的回复:]
补充一下:

dim sIp(3) as byte '将IP声明为byte数组比如192.168.0.1
dim s1 as real_process '返回数据
dim lPort as long '端口
lport=1
sip(0)=192 :sip(1)=168:sip(2)=0 :sip(3)=1

call JBC3K3P_Recvs(s1,sip(0),lport)
[/Quote]
为什么调用的时候,整个VB开发环境都关掉了呢 我的QQ是869441535
zengJingSha2010 2009-11-24
  • 打赏
  • 举报
回复
Public Type Real_process
card As Currency '//整型卡号
szcard(16) As Byte '//10字节长度字符串卡号,这个卡号是为了方便应用程序操作用的.
sztime(16) As Byte '//刷卡时间 格式 HH:NN:SS
szdate(16) As Byte '//刷卡日期 格式 YYYY-MM-DD
money As Long '//消费金额,单位为(分). 这个金额是键盘输入的消费金额.
balance As Long '//余额,单位为(分). 这个金额是给收费机LED显示用的.
stype As Long '//1-手动,自动消费. 2-请求卡片余额.
result As Long '//给收费机的处理结果. 0-成功. >0失败,并在LED上显示Err1,值范围 0 - 19
record As Long '//设备中的记录数.如果这个记录数不为0,表示设备中有脱机消费数据,需要用JBC3300_Record_id函数采集.
registry As Long '//设备中的注册数.
End Type

Public Declare Function JBC3K3P_Recvs Lib "Real3k3p.dll" (ByRef p As Real_process, ByVal ip As String, ByVal port As Long) As Integer
我是这样的,可不管用,我要自杀了
simon__sun 2009-11-24
  • 打赏
  • 举报
回复
补充一下:

dim sIp(3) as byte '将IP声明为byte数组比如192.168.0.1
dim s1 as real_process '返回数据
dim lPort as long '端口
lport=1
sip(0)=192 :sip(1)=168:sip(2)=0 :sip(3)=1

call JBC3K3P_Recvs(s1,sip(0),lport)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧