怎样调用dephi的dll动态连接库,下面是dephi的dll的函数说明,小弟没弄过dll希望领导们给看看,举一下用vc++调用其中某个函数的例子,网上相关资料给的例子看不明白*_*,不然我就死悄悄了,谢谢大家了(从里面举个例子吧!)********************************************************
{*ICCODE 智能卡函数库 Delphi 声明单元*}unit ICCODE;interface
uses
  Windows, SysUtils;const
  SOK            = 'OK';
  SERROR         = 'ERROR';
  SOVER          = 'OVER';
  ICCODE_API     = 'ICCODE20.dll';//     自定义通信错误常量
  ERROR_IO_CHECK=$00000001; //校验错误
  ERROR_IO_READ=$00000002; //读错误
  ERROR_IO_WRITE=$00000003; //写错误
  ERROR_IO_NOEND=$00000004; //串口接收未结束而中断
  ERROR_IO_NOPEN=$00000005; //不能打开端口
  ERROR_IO_COMMAND=$00000006; //命令错误
  ERROR_IO_NOHANDLE=$00000007; //无句柄错误
  ERROR_IO_TIMEOUT=$00000008; //通讯超时type
  PClockInfo = ^TClockInfo;
  TClockInfo = record
    hPort: THandle;
    clock_id: Byte;
    Ver: string;
    ICID: BOOL;
    Fireware: Double;
    RunMode: Integer;
    Port, BaudRate, SelType, DeviceType, Clock_Type: integer;
    Block, CmdVerify, Connected, bSelected: Boolean;
  end;{设备联接类}//    打开端口及联接设备
function ConnectClock(Port, BaudRate: Integer; ClockNo: Byte; BroadCast: Boolean=False): THandle; stdcall; external ICCODE_API
//    Port       : 端口号, COM1=1, COM2=2;
//    BaudRate   : 波特率, 一般为9600
//    ClockNo    : 为机号, 范围0-252
//    BroadCast  : 为开始群发功能, 不接收返回状态
//    说明       : 返回值为端口句柄, 当返回-1时表示端口无效或是被占用, 返回0时代表无法联机//    断开联接及关闭端口
function DisConnectClock(hPort: THandle): Boolean; stdcall; external ICCODE_API
//    此函数和ConnectClock 对应//    检查指定的机器是否在联机状态
function CheckConnectClock(hPort: THandle; ClockNo: Byte; BroadCast: Boolean=False): Byte; stdcall; external ICCODE_API
//    ClockNo    : 为机号, 0-252
//    BroadCast  : 为开始群发功能, 不接收返回状态
//    说明       : 返回机器运行模式, 只能是下列值
//      Return=0 联接不成功
//      Return=1 考勤机, Return=2考勤门禁机, Return=3门禁机, Return=4份饭机//    联接指定的机器
function CallClock(hPort: THandle; ClockNo: Byte; BroadCast: Boolean=False): Byte; stdcall; external ICCODE_API
//    ClockNo    : 为机号, 0-252
//    BroadCast  : 为开始群发功能, 不接收返回状态
//    说明       : 返回机器运行模式, 只能是下列值
//      Return=0 联接不成功
//      Return=1 考勤机, Return=2考勤门禁机, Return=3门禁机, Return=4份饭机//   取消联接机器
function UnCallClock(hPort: THandle): Boolean; stdcall; external ICCODE_API
//    机器复位
function ResetClock(hPort: THandle): Boolean;stdcall; external ICCODE_API
//    将卡钟复位到出厂状态,复位会清除所有数据和下载名单//    读设备型号参数
function GetClockParam(hPort: THandle; var DeviceType: Integer; var Fireware: Double; var ICID: BOOL): Boolean; stdcall; external ICCODE_API
//    自动识别机器型号, 一般在联机后马上调用以使DLL识别型号//    手动设置型号参数
//    取得设备序列号
function ReadClockSerialNo(hPort: THandle; SerialNo: PChar): Boolean; stdcall; external ICCODE_API//    设置设备序列号
function SetClockSerialNo(hPort: THandle; SerialNo: PChar): Boolean; stdcall; external ICCODE_API{版本控制类}{设备管理普通类}
//    设置刷卡时显示卡号还是工号
function SetupDisplayNumberType(hPort: THandle; Kind: Integer): Boolean;stdcall; external ICCODE_API
//    Kind       : 显示类型
//      Kind=0   : 显示卡号
//      Kind=1   : 显示工号
//    实时读取一条刷卡数据(马上返回)
function RealReadRecord(hPort: THandle; Card: PChar; timeString: PChar; var , flag, clock_id: Integer): Integer;stdcall; external ICCODE_API
//    Card       : 读回的卡号字符串(0结束), 缓冲区需大於20字节长度
//    timeString : 读回的14位刷卡时间字符串(0结束), 格式为yyyymmddhhmmss, 缓冲区需大於20字节长度
//           : 打卡标识
//    flag       : 记录类型(保留)
//    clock_id   : 刷卡机号
//    说明当返回0时代表成功, 其它值参考自定义错误//    开始或结束读取刷卡区的卡号(非实时功能)
function ReadCardNo(hPort: THandle; Card: PChar; Kind: Integer): Boolean;stdcall; external ICCODE_API
//    CardNo   : 返回读取的卡号缓冲区, 不小于20字节
//    Kind     : 当Kind=0开始读取卡号, Kind=1 结束读取卡号//    实时读取在刷卡区的卡号(无等待马上返回)
function RealReadCardNo(hPort: THandle; Card: PChar; Card_Length: Integer=10): Boolean;stdcall; external ICCODE_API
//    Card       : 读回的卡号字符串(0结束), 缓冲区需大於20字节长度
//    Card_Length: 希望返回的卡号长度, 必须是10
//    说明       : 必须先调用ReadCardNo{实时控制类}
//    设置通信结束字符
procedure SetEndChar(Ch: Char); stdcall; external ICCODE_API{以下为错误处理函数}
//    取得最后一次函数调用的错误代码编号
function GetRecentErrCode(): DWORD; stdcall; external ICCODE_APIimplementation
end.
********************************************************

解决方案 »

  1.   

    对Delphi不太了解。我看这样吧,用VC++的Depends看看这个dll导出了什么函数,
    然后再到你上面的程序中看函数原型。
      

  2.   

    1.定义:
    typedef HANDLE  (__stdcall *FConnectClock)(int Port, int BaudRate,unsigned char  ClockNo, bool BroadCast=false);   
    2.调用:
      FConnectClock ConnectClock;
      HINSTANCE hs= LoadLibrary("ICCODE20.dll");
      ConnectClock=(FConnectClock) GetProcAddress(hs,"ConnectClock");
      ConnectClock(1,9600,'1');
    你最好问厂家要VC的.h及.lib,这样就简单了 
      

  3.   

    你把上面的代码翻译成C++的头文件不就行了吗。
    const 
    ///////////////////////////////////////
    它下面的是常量定义.你可以译成#define ERROR_IO_CHECK  0x00000001
    //////////////////////////////////////
    type///////////////////////////////////////
    它下面是结构体定义:你可以译成struct.
    typedef struct _ClockInfo
    {
      hPort :handle;
      clock_id:BYTE
      .........
    }ClockInfo,*PClockInfo
    ///////////////////////////////////////function ConnectClock(Port, BaudRate: Integer; ClockNo: Byte; BroadCast: Boolean=False): THandle; stdcall; external ICCODE_API
    ///这就是函数引用的声明.HANDLE __STDCALL ConnectClock(.......);
    或HANDLE WINAPI ConnectClock(....);
     象上面的这样引用你需要有lib文件
    加上这句#progra comment(lib,"***.lib");如果没有lib文件就只有象[keiy]说明的这样动态加载DLL.
      

  4.   

    厂家之提供了dephi的dll,没有lib呀,怎么办
      

  5.   

    没有lib.用我楼上的,不过你可与厂家联系,他那肯定有lib及.h,我以前用watch的,就有