在我没有把它变成dll得时候用得还是好好的。这么变成dll后就调用出错了呢?
Access violation at address 003c2841 in module 'DLLCON.DLL',
Read of address 00000038.
下面是变成DLL前的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ComCtrls, SPComm;
const
WM_COMMNOTIFY=WM_USER+1;//通讯消息
start=chr($7E);
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
ComboBox1: TComboBox;
Button2: TButton;
Button3: TButton;
ComboBox2: TComboBox;
Comm1: TCommm;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
RichEdit1:TRichEdit;
dcb:TDCB;
ComName:pchar;
DayTime,PassTime:TDatetime;
PerCode,Address,DoorKey,apply,nPerson,nOpenCount,TT:integer;
bagsize:char;
BoardID,Name,MDelay,SupOrder,Edition,Dactylogram:shortstring;
s0,s1,s2,s3,s4,s5,bagnumber:shortstring;
r0,r1,r2,Raddress,r3,r4:shortstring;
Send,Receive:string;
function SetNetID(BoardID:integer;Address:integer):BOOL;StdCall;//设置门禁机网络地址号implementation{$R *.dfm}
//发送数据
procedure Transmit;
var
i,count:integer;
commflg:boolean;
sbuf:array of byte;
begin
commflg:=true;
count:=Length(Send);
setLength(sbuf,count);
for i:=1 to count do
begin
sbuf[i]:=byte(Send[i]);
if not Form1.Comm1.WriteCommData(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2);
end;
if not commflg then
MessageDlg('发送失败!',mterror,[mbyes],0);
end;//接收处理
procedure ReadData;
var
buffer:Pointer;
BufferLength:Word;
begin
SetLength(Receive,BufferLength);
Move(Buffer^,PChar(Receive)^,BufferLength);
end;Function SetNetID(BoardID:integer;Address:integer):BOOL;//设置门禁机网络逻辑地址号
begin
bagsize:=chr($04);
s0:=start;
s1:=start;
s2:=chr($4f);
s3:=chr(Address);
s4:=bagsize;
s5:=chr(BoardID);
Send:=s0+s1+s2+s3+s4+s5;
Transmit; ReadData;
Raddress:=r3;
r0:=copy(Receive,1,1);
r1:=copy(Receive,2,1);
r2:=copy(Receive,3,1);
r3:=copy(Receive,4,1);
bagnumber:=copy(Receive,5,2);
if r0+r1=start+start then
if r2=chr($5f) then
Result:=true
else if r2=chr($7f) then
Result:=false
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
setnetid(strtoint(combobox1.Text),strtoint(edit1.Text));
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Comm1.StartComm;
Comm1.CommName:=ComboBox2.Text;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
Comm1.StopComm;
end;end.
变成DLL后的代码为:
unit ComFuc;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, SPComm;type
TForm1 = class(TForm)
Comm1: TCommm;
private
{ Private declarations }
public
{ Public declarations }
end;const
start=chr($7E);
var
Form1: TForm1;
Comm1: TCommm;
DayTime,PassTime:TDatetime;
PerCode,Address,DoorKey,apply,nPerson,nOpenCount,TT:integer;
bagsize:char;
BoardID,Name,MDelay,SupOrder,Edition,Dactylogram:shortstring;
s0,s1,s2,s3,s4,s5,bagnumber:shortstring;
r0,r1,r2,Raddress,r3,r4:shortstring;
Send,Receive:string;
{ Declare the export function 宣布Form函数出口}
function OpenCom(Comname:shortstring):BOOL;StdCall; //打开串口
function CloseCom:BOOL;StdCall;//关闭串口
function SetNetID(BoardID:integer;Address:integer):BOOL;StdCall;//设置门禁机网络地址号
implementation{$R *.dfm}procedure Transmit;
var
i,count:integer;
commflg:boolean;
sbuf:array of byte;
begin
commflg:=true;
count:=Length(Send);
setLength(sbuf,count);
for i:=1 to count do
begin
sbuf[i]:=byte(Send[i]);
if not Comm1.WriteCommData(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2);
end;
if not commflg then
MessageDlg('发送失败!',mterror,[mbyes],0);
end;procedure ReadData;
var
buffer:Pointer;
BufferLength:Word;
begin
SetLength(Receive,BufferLength);
Move(Buffer^,PChar(Receive)^,BufferLength);
end;Function OpenCom(Comname:shortstring):BOOL;//打开串口
begin
Comm1.StartComm;
Comm1.CommName:=Comname;
end;Function CloseCom:BOOL;//关闭串口
begin
Comm1.StopComm;
end;Function SetNetID(BoardID:integer;Address:integer):BOOL;//设置门禁机网络逻辑地址号
begin
bagsize:=chr($04);
s0:=start;
s1:=start;
s2:=chr($4f);
s3:=chr(Address);
s4:=bagsize;
s5:=chr(BoardID);
Send:=s0+s1+s2+s3+s4+s5;
Transmit; ReadData;
Raddress:=r3;
r0:=copy(Receive,1,1);
r1:=copy(Receive,2,1);
r2:=copy(Receive,3,1);
r3:=copy(Receive,4,1);
bagnumber:=copy(Receive,5,2);
if r0+r1=start+start then
if r2=chr($5f) then
Result:=true
else if r2=chr($7f) then
Result:=false
else result:
Access violation at address 003c2841 in module 'DLLCON.DLL',
Read of address 00000038.
下面是变成DLL前的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ComCtrls, SPComm;
const
WM_COMMNOTIFY=WM_USER+1;//通讯消息
start=chr($7E);
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
ComboBox1: TComboBox;
Button2: TButton;
Button3: TButton;
ComboBox2: TComboBox;
Comm1: TCommm;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
RichEdit1:TRichEdit;
dcb:TDCB;
ComName:pchar;
DayTime,PassTime:TDatetime;
PerCode,Address,DoorKey,apply,nPerson,nOpenCount,TT:integer;
bagsize:char;
BoardID,Name,MDelay,SupOrder,Edition,Dactylogram:shortstring;
s0,s1,s2,s3,s4,s5,bagnumber:shortstring;
r0,r1,r2,Raddress,r3,r4:shortstring;
Send,Receive:string;
function SetNetID(BoardID:integer;Address:integer):BOOL;StdCall;//设置门禁机网络地址号implementation{$R *.dfm}
//发送数据
procedure Transmit;
var
i,count:integer;
commflg:boolean;
sbuf:array of byte;
begin
commflg:=true;
count:=Length(Send);
setLength(sbuf,count);
for i:=1 to count do
begin
sbuf[i]:=byte(Send[i]);
if not Form1.Comm1.WriteCommData(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2);
end;
if not commflg then
MessageDlg('发送失败!',mterror,[mbyes],0);
end;//接收处理
procedure ReadData;
var
buffer:Pointer;
BufferLength:Word;
begin
SetLength(Receive,BufferLength);
Move(Buffer^,PChar(Receive)^,BufferLength);
end;Function SetNetID(BoardID:integer;Address:integer):BOOL;//设置门禁机网络逻辑地址号
begin
bagsize:=chr($04);
s0:=start;
s1:=start;
s2:=chr($4f);
s3:=chr(Address);
s4:=bagsize;
s5:=chr(BoardID);
Send:=s0+s1+s2+s3+s4+s5;
Transmit; ReadData;
Raddress:=r3;
r0:=copy(Receive,1,1);
r1:=copy(Receive,2,1);
r2:=copy(Receive,3,1);
r3:=copy(Receive,4,1);
bagnumber:=copy(Receive,5,2);
if r0+r1=start+start then
if r2=chr($5f) then
Result:=true
else if r2=chr($7f) then
Result:=false
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
setnetid(strtoint(combobox1.Text),strtoint(edit1.Text));
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Comm1.StartComm;
Comm1.CommName:=ComboBox2.Text;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
Comm1.StopComm;
end;end.
变成DLL后的代码为:
unit ComFuc;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, SPComm;type
TForm1 = class(TForm)
Comm1: TCommm;
private
{ Private declarations }
public
{ Public declarations }
end;const
start=chr($7E);
var
Form1: TForm1;
Comm1: TCommm;
DayTime,PassTime:TDatetime;
PerCode,Address,DoorKey,apply,nPerson,nOpenCount,TT:integer;
bagsize:char;
BoardID,Name,MDelay,SupOrder,Edition,Dactylogram:shortstring;
s0,s1,s2,s3,s4,s5,bagnumber:shortstring;
r0,r1,r2,Raddress,r3,r4:shortstring;
Send,Receive:string;
{ Declare the export function 宣布Form函数出口}
function OpenCom(Comname:shortstring):BOOL;StdCall; //打开串口
function CloseCom:BOOL;StdCall;//关闭串口
function SetNetID(BoardID:integer;Address:integer):BOOL;StdCall;//设置门禁机网络地址号
implementation{$R *.dfm}procedure Transmit;
var
i,count:integer;
commflg:boolean;
sbuf:array of byte;
begin
commflg:=true;
count:=Length(Send);
setLength(sbuf,count);
for i:=1 to count do
begin
sbuf[i]:=byte(Send[i]);
if not Comm1.WriteCommData(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2);
end;
if not commflg then
MessageDlg('发送失败!',mterror,[mbyes],0);
end;procedure ReadData;
var
buffer:Pointer;
BufferLength:Word;
begin
SetLength(Receive,BufferLength);
Move(Buffer^,PChar(Receive)^,BufferLength);
end;Function OpenCom(Comname:shortstring):BOOL;//打开串口
begin
Comm1.StartComm;
Comm1.CommName:=Comname;
end;Function CloseCom:BOOL;//关闭串口
begin
Comm1.StopComm;
end;Function SetNetID(BoardID:integer;Address:integer):BOOL;//设置门禁机网络逻辑地址号
begin
bagsize:=chr($04);
s0:=start;
s1:=start;
s2:=chr($4f);
s3:=chr(Address);
s4:=bagsize;
s5:=chr(BoardID);
Send:=s0+s1+s2+s3+s4+s5;
Transmit; ReadData;
Raddress:=r3;
r0:=copy(Receive,1,1);
r1:=copy(Receive,2,1);
r2:=copy(Receive,3,1);
r3:=copy(Receive,4,1);
bagnumber:=copy(Receive,5,2);
if r0+r1=start+start then
if r2=chr($5f) then
Result:=true
else if r2=chr($7f) then
Result:=false
else result:
解决方案 »
- 使用TXMLDocument控件遇到的问题,请各位帮帮忙.很急很急!谢谢!--在线等!!!
- 如何实现文本转图片的处理?
- 急!关系饭碗问题啊!!
- 熟悉网吧计费管理系统开发的请进来看看
- 发布程序的问题
- 类型转换问题,大家快来拿分
- 请教:如何使listview里的图标显示得大一些?急!谢谢!
- 在线等待,如何控制DBGRID的显示行数,怎么实现象翻页一样的功能?????
- Delphi 高手请进、高高手请进!关于动态界面的问题!
- 程序运行时出现‘capability can not supported'
- 100分求救!SQLServer连接Delphi6
- ◆◆◆晕,DELPHI的Undo功能极为不爽◆◆◆谁知道TRW(著名的调试跟踪软件)作者朱南灏开发的那个叫Clip什么来着,是剪贴板工具软件!!!
麻烦各位高手了。。特别是有关内存分配的~~~~~~~~~~~~~~~~~~~~~~~~
我们约好一起去看雪!
☆★○●◎◇◆□■△▲※
看书,我还是很有时间的。。~~~~~~~~~~~~~~~~~~~~~~~~
我们约好一起去看雪!
☆★○●◎◇◆□■△▲※
getmem我都误所谓,只要你们的调用成功,我能根据你们的依葫芦画瓢完成我的
是不是我想的太美了,呵呵
我一直都菜~~~~~~~~~~~~~~~~~~~~~~~~
世界因为你我而年轻!
☆★○●◎◇◆□■△▲※
SysUtils,
Classes;{$R *.RES}begin
//这里写代码,如果包括了窗体,在uses里面加上窗体的单元名称
//我知道好象是这样的, 但我忘记了.
end.
uses
SysUtils,
Classes,
Dialogs;{$R *.RES}procedure test;
begin
ShowMessage('kk');
end;
exports
test;
begin
end.
呵呵