最典型的VB调用动态库问题
现在有个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 失败
*/ --------------------编程问答-------------------- sf 帮顶 --------------------编程问答-------------------- Private Declare Function JBC3K3P_Recvs Lib "Real3k3p.dll" (ByVal p As Long,byval ip as string,byval port as long) As Long
或者全部都声明成long也行 --------------------编程问答-------------------- Private Declare Function JBC3K3P_Recvs Lib "Real3k3p.dll" ( ..)
Type real_process
...
End Type
待续....
--------------------编程问答-------------------- 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 --------------------编程问答-------------------- int & 参数类型不支持,应该转换成 int *。
如果不能修改原始 dll 就再做一个 dll 进行封装。 --------------------编程问答-------------------- 直接引用那个动态链接库不可以么? --------------------编程问答-------------------- 试试这样可以吧,在模块中声明:
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 --------------------编程问答-------------------- 补充一下:
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) --------------------编程问答-------------------- 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
我是这样的,可不管用,我要易做图了 --------------------编程问答--------------------
为什么调用的时候,整个VB开发环境都关掉了呢 我的QQ是869441535 --------------------编程问答--------------------
等你待续...... --------------------编程问答-------------------- http://topic.csdn.net/u/20090112/17/8baefb97-5891-46ef-a2be-b02f4d7f0ef9.html --------------------编程问答-------------------- VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试 --------------------编程问答--------------------
本来想google一下各个字段的类型的...不过后面的人比我要有经验...我一会儿琢磨琢磨大家的回答
再给些思路 --------------------编程问答--------------------
参数换来换去都不对,int64不知道用什么好 --------------------编程问答--------------------
double ...try this --------------------编程问答-------------------- 路过,帮顶 --------------------编程问答-------------------- 说了 int & 参数类型不支持,试什么试!
补充:VB , 基础类