这是一个Send.dll里的一个函数
那位大哥能够用Delphi写一个例子
关于这个函数该如何调用这个 DLL里的函数
1 ) c_mload_key函数原型:
c_mload_key(comm_value &,keyset_value &,zone_value &,key_value&)输入参数:
Comm_value struct:
COM_PORT contains COM port number
DIS_VALUE contains 40 characters for output return
DATA_LEN contains the length of output return data
Keyset_value struct:
  KEYSET contains the value of key_mode(‘0’-‘6’)
Zone_value struct:
  ZONE contains the value of sector(‘00’-‘15’)
Key_value struct:
KEY contains the value of key (‘000000000000’-‘ffffffffffff’12 chararcters)
 
结构返回值(if success):
下层正确接收后,装密匙正确返回格式为:
   ‘f0’+ fb’
下层正确接收,但下层装密匙失败返回格式:
   ‘f0’ + bc’
下层接收正确但CHKSUM不正确返回格式:
‘f0’+‘b8’
下层接收正确但数据长度有错返回格式:
‘f0’+ ‘b7’
下层接收正确但控制代码不存在返回格式:
 ‘b9’+ ‘b9’ 
下层接收正确但数据格式错误返回格式:
 ‘f0’+ ‘cc’
其它通信错误:
‘ba’函数返回值:
int:
82: Is expressing that the cortrolling no respond.
87: Is expressing that the cortrolling communication unsucces.
83: Is expressing that the cortrolling communication succes.函数描述:
装载系统密匙。  下面是我做的例子:(有啥问题吗???)
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
Comm_value=Record
  COM_PORT :integer;    //端口
  DIS_VALUE :string;
  DATA_LEN :integer;
end;
type
  Keyset_value=Record
   KEYSET :string;
end;type
  Zone_value=Record
   ZONE :string;
end;
type
  Key_value=Record
   KEY :string;
end;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
      end;var
  Form1: TForm1;
  X_Comm_value:Comm_value;
implementation{$R *.dfm}
 function c_mpoll_mcu(a:comm_value):integer;stdcall;external'sendcard.dll' ;
 function c_mcheck_mcu(a:comm_value):integer;stdcall;external'sendcard.dll' ; function c_mload_key(a:comm_value;b:keyset_value;c:zone_value;d:key_value):integer;stdcall;external'sendcard.dll' ;
 
procedure TForm1.Button2Click(Sender: TObject);
var
 X:Comm_value;
 Y:keyset_value;
 Z:zone_value;
 L:key_value;
 s:STRING;
begin
  X.COM_PORT:=1 ;
   Setlength(X.DIS_VALUE,40);
  //X.DATA_LEN:='2';
  Y.KEYSET:='0';
  Z.ZONE:='01';
  L.KEY:='000000FFFFFF';
  s:=INTTOSTR(c_mload_key(X,Y,Z,L)); memo1.Lines.add(datetimetostr(Now)+'  '+S);
 //Memo1.Lines.Add(X.DATA_LEN+X.DIS_VALUE) ;
//c_mread_card(X,Y,Z);
end;
end 这样总是不行!不知道怎么回事?????大虾救我啊

解决方案 »

  1.   

    DIS_VALUE :string;
      DATA_LEN :integer;
    就是这两个我觉得参数我不知道怎么写!!
      

  2.   

    调用C ++写的东西 最重要的是这边结构里变量声明跟DLL里保持一致  String 要是用这个声明变量 结构体的 长度根本就不是固定的 估计Dll里面肯定不是用这个来声明的 看看他是Pchar还是 数组
    --------------------------------------------------------------------------------
    金盆洗澡    重出江湖     打劫.抢分   掀起一场腥风血雨   戒烟攒钱 只为换新车
      

  3.   

    他们说:他们的DLl是用VC编的
    定义的是
    typedef struct KEY_ADDR 
    { unsigned char com_port; 
     unsigned char dis_value[MAXCARDALL]; 
     unsigned char data_len[2]; }
     comm_value;
    是指针数组
    那么用Delphi该如何声明变量的参数呢??又该如何的初始化参数呢??