当前位置:编程学习 > VB >>

最典型的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
我是这样的,可不管用,我要易做图了 --------------------编程问答--------------------
引用 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)

为什么调用的时候,整个VB开发环境都关掉了呢 我的QQ是869441535 --------------------编程问答--------------------
引用 3 楼 liuxiaoyi666 的回复:
  Private  Declare  Function  JBC3K3P_Recvs Lib  "Real3k3p.dll"  ( ..)

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

等你待续...... --------------------编程问答-------------------- http://topic.csdn.net/u/20090112/17/8baefb97-5891-46ef-a2be-b02f4d7f0ef9.html --------------------编程问答-------------------- VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试 --------------------编程问答--------------------
引用 11 楼 zengjingsha2010 的回复:
引用 3 楼 liuxiaoyi666 的回复:
  Private  Declare  Function  JBC3K3P_Recvs Lib  "Real3k3p.dll"  ( ..)

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


等你待续......


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

再给些思路 --------------------编程问答--------------------
引用 13 楼 simon__sun 的回复:
VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试

参数换来换去都不对,int64不知道用什么好 --------------------编程问答--------------------
引用 15 楼 zengjingsha2010 的回复:
引用 13 楼 simon__sun 的回复:
VB环境关掉的原因应该是代入的参数不符合DLL的要求! 将参数换类型测试

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


double ...try this --------------------编程问答-------------------- 路过,帮顶 --------------------编程问答-------------------- 说了 int & 参数类型不支持,试什么试!
补充:VB ,  基础类
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,