我刚学dll,有些东西不很清楚
下面工程中的问题还请大家多多帮忙,
我的目的是想在外部程序中调用show以显示窗体,调用HextoDec以计算并显示结果,调用free以关闭并释放窗体,奈何编译却总是出错
出错的地方我已经注释出来了,不知该怎么修改,请大家多多指教!工程文件:
LIBRARY Project1;uses
SYSUTILS,
CLASSES,
Unit1 in 'Unit1.pas' {Form1};{$R *.RES}
EXPORTS
show,
free,
HextoDec;begin
end.单元文件:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procedure view(s:string;memo:Tmemo);
end;var
Form1: TForm1;
function HextoDec(Hex:string):longint;EXPORT;
procedure show();EXPORT;
procedure free();EXPORT;
implementation{$R *.DFM}procedure TForm1.view(s:string;memo:Tmemo); //显示结果
begin
memo.text:=memo.text+s+' ';
end;procedure show(); //创建窗体并显示之
begin
FORM1:=tfORM1.Create(APPLICATION);
form1.Show;
end;procedure free();//释放窗体
begin
form1.free;
end;function HextoDec(Hex:string):longint; //十六制转化为十进进制
var i,j,len:integer;
rusl,sqr,int:longint;
begin
len:=length(Hex)-1;
rusl:=0;
for i:=0 to len do
begin
sqr:=1;
for j:=1 to len-i do
sqr:=16*sqr;
case pchar(Hex)[i] of
'A','a':int:=10;
'B','b':int:=11;
'C','c':int:=12;
'D','d':int:=13;
'E','e':int:=14;
'F','f':int:=15;
else
int:=strtoint(pchar(Hex)[i]);
end;
rusl:=rusl+int*sqr;
end;
view(inttostr(rusl),memo1);//编译出错出处 [Error] Unit1.pas(63): Undeclared identifier: 'view'
// [Error] Unit1.pas(63): Undeclared identifier: 'memo1'
// [Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'
HextoDec:=rusl;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Free;
end;end.
下面工程中的问题还请大家多多帮忙,
我的目的是想在外部程序中调用show以显示窗体,调用HextoDec以计算并显示结果,调用free以关闭并释放窗体,奈何编译却总是出错
出错的地方我已经注释出来了,不知该怎么修改,请大家多多指教!工程文件:
LIBRARY Project1;uses
SYSUTILS,
CLASSES,
Unit1 in 'Unit1.pas' {Form1};{$R *.RES}
EXPORTS
show,
free,
HextoDec;begin
end.单元文件:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procedure view(s:string;memo:Tmemo);
end;var
Form1: TForm1;
function HextoDec(Hex:string):longint;EXPORT;
procedure show();EXPORT;
procedure free();EXPORT;
implementation{$R *.DFM}procedure TForm1.view(s:string;memo:Tmemo); //显示结果
begin
memo.text:=memo.text+s+' ';
end;procedure show(); //创建窗体并显示之
begin
FORM1:=tfORM1.Create(APPLICATION);
form1.Show;
end;procedure free();//释放窗体
begin
form1.free;
end;function HextoDec(Hex:string):longint; //十六制转化为十进进制
var i,j,len:integer;
rusl,sqr,int:longint;
begin
len:=length(Hex)-1;
rusl:=0;
for i:=0 to len do
begin
sqr:=1;
for j:=1 to len-i do
sqr:=16*sqr;
case pchar(Hex)[i] of
'A','a':int:=10;
'B','b':int:=11;
'C','c':int:=12;
'D','d':int:=13;
'E','e':int:=14;
'F','f':int:=15;
else
int:=strtoint(pchar(Hex)[i]);
end;
rusl:=rusl+int*sqr;
end;
view(inttostr(rusl),memo1);//编译出错出处 [Error] Unit1.pas(63): Undeclared identifier: 'view'
// [Error] Unit1.pas(63): Undeclared identifier: 'memo1'
// [Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'
HextoDec:=rusl;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form1.Free;
end;end.
view(inttostr(rusl),memo1);
hkbarton(宁静至远||淡泊明志):你好
我想您开得比较全面,能否解释一下dll中的接口函数和它的内部函数(变量)
之间相互调用时应注意的问题吗?再次谢过!
你刚才的代码由于export的都是定义在接口部分的var里的,而你要调用的函数和那个memo都是写在tform里的,所以应该加上form1.
不知道,对不对,dll在平时编程时很少用(都是些小程序),所以还听听高手怎么说
procedure show();stdcall;
procedure free();stdcall;声明改改