我的程序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为什么呢?那里错误了呢
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为什么呢?那里错误了呢
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
cyg1dm(西岭雪) ( ) 信誉:94 Blog 加为好友 2007-06-10 15:17:22 得分: 0
估计没人会了
Top
////////////////////
很不喜欢楼主的说话方式,这样简单的问题,如果真没人回答,应该是你自己没描述清楚。直白了点,希望别介意
////////////////////////////
大体看了看。
1 MCS_SetStringMode没有在 SLE4428_ReadChar之前用,确信没 关系吗?
2 表面看SLE4428_ReadChar第一个参数需要传地址,你直接给32,确信?
////////////////////////////
你这样的描述,别人没法确认的。你自己调试下看看, ,
// stdcall;external'MCS_SR.dll';
Function SLE4428_ReadChar(wAddr:Integer;wLength:Integer;bReadData:pchar) :integer;
stdcall;external'MCS_SR.dll';//////////////////////
很可能你需要的是被你注释掉的。