我的程序unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation
Function MCS_InitComm(bPort:integer;dwCommBaudRate:integer) :integer;
  stdcall;external'MCS_SR.dll';
  Function MCS_ExitComm :integer;
  stdcall;external'MCS_SR.dll';
  Function MCS_SetStringMode(bStringMode:integer) :Integer;
  stdcall;external'MCS_SR.dll';
  Function MCS_LED (bOnOff:integer):Integer;
  stdcall;external'MCS_SR.dll';
  Function SLE4428_OpenCard(bATR:pchar):integer;
  stdcall;external'MCS_SR.dll';
  Function SLE4428_CloseCard :integer;
  stdcall;external'MCS_SR.dll';
//  Function SLE4428_ReadChar(var wAddr:integer;var wLength:Integer;var bReadData:pchar):integer;
//  stdcall;external'MCS_SR.dll';
  Function SLE4428_ReadChar(wAddr:Integer;wLength:Integer;bReadData:pchar) :integer;
  stdcall;external'MCS_SR.dll';{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
var
  str1:array[0..255] of char;
  str2:array[0..255] of char;
  r:integer;
begin
  MCS_InitComm(0,115200);  //串口1,波特率为115200
  SLE4428_OpenCard(str1);  //给卡上电
  r:=SLE4428_ReadChar(32,40,str2);  //读卡
  ShowMessage(IntToStr(r));
  if r=0 then
    MCS_LED(2) //如果读卡成功则绿灯亮
  else
   MCS_LED(1);       //如果读卡不成功则红灯亮
   SLE4428_CloseCard;     //给卡下电
   MCS_ExitComm ;         //关闭通讯
end;end.返回值不是0为什么呢?那里错误了呢

解决方案 »

  1.   

    这个要查被调DLL的接口文档了,别人是无法帮忙的.
      

  2.   

    SLE4428_ReadChar
    SLE4428_ReadChar 函数从SLE4418/SLE4428卡片的存储区读取一串字符。此函数受MCS_SetStringMode影响。WORD SLE4428_ReadChar(
    WORD _wAddr,
    WORD _wLength,
    BYTE *_bReadData
    );
     
    参数
    _wAddr 
    指定要读取的字符串在卡片存储区内的起始地址。 _wLength 
    指定要读取的字符串长度。SLE4418/SLE4428存储区的长度为1024字节。 _bReadData 
    字符型指针,指向从卡片存储区内读到的字符串并返回给应用程序。在HEXADECIMAL模式下,应用程序应确保在调用此函数前,已分配给_bReadData指针至少_wLength个字节的空间;在ASCIISTRING模式下,应确保已分配给_bReadData指针至少(_wLength * 2)个字节的空间。 返回值
    如果函数调用成功,返回值为0,且_bReadData的内容为从卡片读取到的字符串。如果函数调用失败,返回值不为0。如需得到错误描述,请调用MCS_ErrorMsg。说明
    此函数从卡片内的_wAddr地址起读取_wLength字节长的字符串,并存储在_bReadData指针内返回给应用程序。兼容性
      Windows NT: 4.0以后版本。 
    Windows: Windows 95以后版本。 
    头文件: MCS_SR.h。 
    静态库: MCS_SR.lib。 
    动态库: MCS_SR.dll。 
    这是他提供的呀。在vb里这样用的
    Public Declare Function SLE4428_ReadChar Lib "MCS_SR" (ByVal wAddr As Integer, ByVal wLength As Integer, ByVal bReadData As String) As Integer
      

  3.   

    Top  
     cyg1dm(西岭雪) ( ) 信誉:94    Blog   加为好友  2007-06-10 15:17:22  得分: 0  
     
     
       估计没人会了
      
     
    Top  
    ////////////////////
    很不喜欢楼主的说话方式,这样简单的问题,如果真没人回答,应该是你自己没描述清楚。直白了点,希望别介意
    ////////////////////////////
    大体看了看。
    1  MCS_SetStringMode没有在 SLE4428_ReadChar之前用,确信没 关系吗?
    2  表面看SLE4428_ReadChar第一个参数需要传地址,你直接给32,确信?
    ////////////////////////////
    你这样的描述,别人没法确认的。你自己调试下看看, ,
      

  4.   

    //  Function SLE4428_ReadChar(var wAddr:integer;var wLength:Integer;var bReadData:pchar):integer;
    //  stdcall;external'MCS_SR.dll';
      Function SLE4428_ReadChar(wAddr:Integer;wLength:Integer;bReadData:pchar) :integer;
      stdcall;external'MCS_SR.dll';//////////////////////
    很可能你需要的是被你注释掉的。