[DUG] RFID - EAccess violation
Marshland Engineering
marshland at marshland.co.nz
Wed May 27 23:56:07 NZST 2015
I'm a bit out my depth. Is there something I have missed ?
EAccess violation at address 000000000
I purchased an RFID reader with sample code. I stripped out what was not
necessary and ended up with this.
Sorry for the long code
**************************************************************
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
ComCtrls, StdCtrls, XPMenu, ExtCtrls;
type
TForm1 = class(TForm)
showm: TRichEdit;
Button1: TButton;
procedure falsereason(s:string);
procedure bReadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function
API_PCDRead(comHandle:Thandle;DeviceAddress:integer;mode:byte;add_blk,num_blk:integer;
snr,buffer:pchar):integer;stdcall;external 'mi.dll';
var
Form1: TForm1;
comhandle : Thandle ;
reason:string;
implementation
{$R *.dfm}
procedure TForm1.falsereason(s:string);
begin
if s='' then begin reason:=''; exit; end;
if s='00' then begin reason:=''; exit ; end;
etc
if s='96' then begin reason:='The Operation Do Not Success....'; exit;
end;
end;
procedure TForm1.bReadClick(Sender: TObject);
var
buffer,bufferr:array [0..255] of char;
receive,i :integer;
keydata,cardnum,showmemo:string;
key : pchar;
begin
setlength(keydata,6);
for i:=1 to 6 do begin
keydata[i]:=Chr(StrToInt('$FF'));
end;
key:=StrPCopy(buffer,keydata);
receive:=API_PCDRead(0,0,$00,10,1,key,bufferr);
case receive of
0:begin
for i:=0 to 3 do begin
cardnum:=cardnum+ inttohex(ord(buffer[i]),2);
end;
showm.Lines.Add('Number :'+cardnum);
end;
1:begin
falsereason(inttohex(ord(bufferr[0]),2));
showm.Lines.Add(reason+#13#10);
end
else
showm.Lines.Add('error,no data receive...'+#13#10);
end;
end;
end.
****************************************************************
I added the above to my code and it complies but crashes when I do a receive.
EAccess
unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, Menus, ComCtrls, StdCtrls, Printers, DBCtrls,
Mask, ExtCtrls, IniFiles, DB, ShellAPI, XPMenu;
type
TfMain = class(TForm)
pcMembers: TPageControl;
Members: TTabSheet;
Events: TTabSheet;
DBGrid1: TDBGrid;
DBGrid4: TDBGrid;
DBGrid5: TDBGrid;
Label3: TLabel;
bFees: TButton;
Button1: TButton;
bEmail: TButton;
dbgMembers: TDBGrid;
Label5: TLabel;
Label7: TLabel;
dbgFeesMem: TDBGrid;
dbgSubs: TDBGrid;
Label4: TLabel;
Label2: TLabel;
puSubs: TPopupMenu;
puSubsAdd: TMenuItem;
puSubsDel: TMenuItem;
puFeesListPrinter: TMenuItem;
puFeesListScreen: TMenuItem;
upFeesCardsNotSent: TMenuItem;
PrintSet1: TPrinterSetupDialog;
puEventFees: TPopupMenu;
puFeesAdd: TMenuItem;
puFeesDelete: TMenuItem;
puFeesList: TMenuItem;
puMembers: TPopupMenu;
puAddMember: TMenuItem;
puDeleteMember: TMenuItem;
puBikes: TPopupMenu;
puAddBike: TMenuItem;
puDeleteBike: TMenuItem;
dbmNotes: TDBMemo;
Label6: TLabel;
dbgIncident: TDBGrid;
Label8: TLabel;
PrintDialog1: TPrintDialog;
puIncident: TPopupMenu;
AddIncident1: TMenuItem;
DeleteIncident1: TMenuItem;
dtpMainDate: TDateTimePicker;
DBEdit1: TDBEdit;
Label1: TLabel;
Label9: TLabel;
cbMainYear: TComboBox;
DBGrid2: TDBGrid;
bPostFees: TButton;
Button2: TButton;
eCardNumber: TEdit;
procedure dbgMembersDblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure dbgSubsDblClick(Sender: TObject);
procedure puSubsAddClick(Sender: TObject);
procedure puSubsDelClick(Sender: TObject);
procedure upFeesCardsNotSentClick(Sender: TObject);
procedure puFeesListPrinterClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure dbmNotesExit(Sender: TObject);
procedure puFeesAddClick(Sender: TObject);
procedure puFeesDeleteClick(Sender: TObject);
procedure dbgFeesDblClick(Sender: TObject);
procedure dbgMembersKeyPress(Sender: TObject; var Key: Char);
procedure puFeesListClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure puAddMemberClick(Sender: TObject);
procedure puDeleteMemberClick(Sender: TObject);
procedure puAddBikeClick(Sender: TObject);
procedure puDeleteBikeClick(Sender: TObject);
procedure DBGrid2DblClick(Sender: TObject);
procedure dbmNotesEnter(Sender: TObject);
procedure puFeesListScreenClick(Sender: TObject);
procedure bEmailClick(Sender: TObject);
procedure DBGrid3ColExit(Sender: TObject);
procedure dbgIncidentCellClick(Column: TColumn);
procedure AddIncident1Click(Sender: TObject);
procedure DeleteIncident1Click(Sender: TObject);
procedure MembersShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure falsereason(s:string);
private
{ Private declarations }
public
sKey:String;
bFeesFirstTime:Boolean;
end;
function
API_PCDRead(comHandle:Thandle;DeviceAddress:integer;mode:byte;add_blk,num_blk:integer;
snr,buffer:pchar):integer;stdcall;external 'mi.dll';
var
fMain:TfMain;
comhandle:Thandle ;
Reason:String;
implementation
uses uDM, uMembers, uSubs, uMemCards, uEventFees, uLogon, uBikes, uMemoShow,
uEmail, uIncident;
{$R *.dfm}
procedure TfMain.falsereason(s:string);
begin
if s='' then begin reason:=''; exit; end;
if s='00' then begin reason:=''; exit ; end;
etc
if s='95' then begin reason:='The lock Operation Do Not Success....';
exit; end;
if s='96' then begin reason:='The Operation Do Not Success....'; exit;
end;
end;
******** My other code,
procedure TfMain.Button2Click(Sender: TObject);
var
buffer,bufferr:array [0..255] of char;
receive,i :integer;
keydata,cardnum,showmemo:string;
key : pchar;
begin
setlength(keydata,6);
for i:=1 to 6 do begin
keydata[i]:=Chr(StrToInt('$FF'));
end;
key:=StrPCopy(buffer,keydata);
receive:=API_PCDRead(0,0,$00,10,1,key,bufferr);
case receive of
0:begin
for i:=0 to 3 do begin
cardnum:=cardnum+ inttohex(ord(buffer[i]),2);
end;
showm.Lines.Add('Number :'+cardnum);
end;
1:begin
falsereason(inttohex(ord(bufferr[0]),2));
showm.Lines.Add(reason+#13#10);
end
else
showm.Lines.Add('error,no data receive...'+#13#10);
end;
end;
end.
More information about the Delphi
mailing list