废话不多说 ,问题如下(拜谢!!):DLL函数原型
__int16 __stdcall Z8_ReadDevInteractRecordValue_Hex(HANDLE icdev,unsigned char addr,int * snlen,unsigned char * snrdata);//成功返回0错误返回-1
说明:调用此函数后返回snrdata的数据的数组空间每条数据长11字节,每次最多读6条
DELPHI代码
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Types;type
TForm1 = class(TForm)
Button1: TButton;
ComboBox1: TComboBox;
Label1: TLabel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
ListBox1: TListBox;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
m_iHandle:integer;
m_iAddr:integer; //设备地址
public
redata: array[0..100] of char ;
{ Public declarations }
end;var
Form1: TForm1;implementation
//port 0代表串口1,1代表串口2
Function Z8_InitComm(port:integer):integer; stdcall;
far;external 'Z8rf32.dll' name 'Z8_InitComm' ;// Z8_ExitComm(HANDLE icdev);
Function Z8_ExitComm(port:integer):integer; stdcall;
far;external 'Z8rf32.dll' name 'Z8_ExitComm' ;// Z8_Beep(HANDLE icdev,unsigned char addr,unsigned char times);
Function Z8_Beep(port:integer;addr:integer;times:integer):integer; stdcall;
far;external 'Z8rf32.dll' name 'Z8_Beep';// Z8_RecordCount(HANDLE icdev,unsigned char addr,int * RecordCount);
// Function Z8_RecordCount(icdev:integer;addr:integer;RecordCount:integer):integer; stdcall;
// far;external 'Z8rf32.dll' name 'Z8_ReadRecordCount';// Z8_ReadDevInteractRecordValue_Hex(HANDLE icdev,unsigned char addr,int * snlen,unsigned char * snrdata);
Function Z8_ReadDevInteractRecordValue_Hex(icdev:integer;addr:integer; snlen:Smallint; snrdata: pchar):smallint;
far;stdcall;external 'Z8rf32.dll' name 'Z8_ReadDevInteractRecordValue_Hex';{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
m_iHandle:=0;
try
m_iHandle:=Z8_InitComm(strtoint(combobox1.Text)-1);
Label2.Caption:='打开端口成功 OK,m_iHandle='+inttostr(m_iHandle);
Button1.Enabled:=False;
Button2.Enabled:=true;
except
Label2.Caption:='打开端口失败';
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
begin
i:=Z8_Beep(m_iHandle,m_iAddr,1);
Label2.Caption:=inttostr(i);end;procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
try
i:=Z8_ExitComm(m_iHandle);
Label2.Caption:='关闭端口成功'+inttostr(i);
Button1.Enabled:=True;
Button2.Enabled:=False;
except
Label2.Caption:='关闭端口失败';
end;
end;procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
i:=Z8_ReadDevInteractRecordValue_Hex(m_iHandle,m_iAddr,1,redata) ;
//调试在报错时redata数据正常
if i = 0 then
begin
ListBox1.Items.Add('卡号='+string(redata));
end;
if i=-1 then
begin
ListBox1.Items.Add('无卡!');
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
m_iAddr:=strtoint('127');
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
m_iHandle := -1;
end;end.
运行错误:access violation at address 10004a2b in module'Z8rf32.dll',write of address 00000001调试在报错时redata数据正常
__int16 __stdcall Z8_ReadDevInteractRecordValue_Hex(HANDLE icdev,unsigned char addr,int * snlen,unsigned char * snrdata);//成功返回0错误返回-1
说明:调用此函数后返回snrdata的数据的数组空间每条数据长11字节,每次最多读6条
DELPHI代码
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Types;type
TForm1 = class(TForm)
Button1: TButton;
ComboBox1: TComboBox;
Label1: TLabel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
ListBox1: TListBox;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
m_iHandle:integer;
m_iAddr:integer; //设备地址
public
redata: array[0..100] of char ;
{ Public declarations }
end;var
Form1: TForm1;implementation
//port 0代表串口1,1代表串口2
Function Z8_InitComm(port:integer):integer; stdcall;
far;external 'Z8rf32.dll' name 'Z8_InitComm' ;// Z8_ExitComm(HANDLE icdev);
Function Z8_ExitComm(port:integer):integer; stdcall;
far;external 'Z8rf32.dll' name 'Z8_ExitComm' ;// Z8_Beep(HANDLE icdev,unsigned char addr,unsigned char times);
Function Z8_Beep(port:integer;addr:integer;times:integer):integer; stdcall;
far;external 'Z8rf32.dll' name 'Z8_Beep';// Z8_RecordCount(HANDLE icdev,unsigned char addr,int * RecordCount);
// Function Z8_RecordCount(icdev:integer;addr:integer;RecordCount:integer):integer; stdcall;
// far;external 'Z8rf32.dll' name 'Z8_ReadRecordCount';// Z8_ReadDevInteractRecordValue_Hex(HANDLE icdev,unsigned char addr,int * snlen,unsigned char * snrdata);
Function Z8_ReadDevInteractRecordValue_Hex(icdev:integer;addr:integer; snlen:Smallint; snrdata: pchar):smallint;
far;stdcall;external 'Z8rf32.dll' name 'Z8_ReadDevInteractRecordValue_Hex';{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
m_iHandle:=0;
try
m_iHandle:=Z8_InitComm(strtoint(combobox1.Text)-1);
Label2.Caption:='打开端口成功 OK,m_iHandle='+inttostr(m_iHandle);
Button1.Enabled:=False;
Button2.Enabled:=true;
except
Label2.Caption:='打开端口失败';
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var i:Integer;
begin
i:=Z8_Beep(m_iHandle,m_iAddr,1);
Label2.Caption:=inttostr(i);end;procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
try
i:=Z8_ExitComm(m_iHandle);
Label2.Caption:='关闭端口成功'+inttostr(i);
Button1.Enabled:=True;
Button2.Enabled:=False;
except
Label2.Caption:='关闭端口失败';
end;
end;procedure TForm1.Button4Click(Sender: TObject);
var i:Integer;
begin
i:=Z8_ReadDevInteractRecordValue_Hex(m_iHandle,m_iAddr,1,redata) ;
//调试在报错时redata数据正常
if i = 0 then
begin
ListBox1.Items.Add('卡号='+string(redata));
end;
if i=-1 then
begin
ListBox1.Items.Add('无卡!');
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
m_iAddr:=strtoint('127');
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
m_iHandle := -1;
end;end.
运行错误:access violation at address 10004a2b in module'Z8rf32.dll',write of address 00000001调试在报错时redata数据正常
解决方案 »
- 文本导入ms access
- 急求大写人民币程序(关于发票程序)
- 有谁用UML?
- 关于指针的问题,对高手来说应该不是问题。
- 关于使用adoquery如何用A数据库中的表X更新B数据库中的表Y(ACCESS数据库文件)
- delphi报表控件的问题.
- 关于屏蔽ctrl+alt+del三个组合健的问题,不要告诉我用api函数SystemParametersInfoA
- ---====---怎样管制Delphi程序的源代码?(培养成为热点问题)---====---
- 如何判断edit1.text输入的值(密码)和INI文件(密码)相同。用语句写
- 明明白白文件名,请问程序中一下文件作用分别是什么?
- 求【彻底删除文件】的方法
- 菜鸟求助各位大哥
procedure TForm1.Button4Click(Sender: TObject);
var
i:Integer;
p1:PChar;
aaa:String;
begin
try
GetMem(p1,1024);
i:=Z8_ReadDevInteractRecordValue(m_iHandle,m_iAddr,num,p1) ;
if i =0 then
begin
aaa:=String(p1);
ListBox1.Items.Add('卡号='+aaa);
end;
if i=-1 then
begin
ListBox1.Items.Add('无卡!')// 'i='+inttostr(i)+
end;
FreeMem(p1);
except
on e:Exception do showmessage(E.Message);
end;
end;