我用个DLL主要用来检查输入的口令是否正确,窗体含有一个Edit编辑框,一个按钮Button,在编辑框内输入口令,比较编辑框的值和输入参数返回真假值。.可当我在生成dll文件写完,点击运行生成dll时总是弹出错误窗口"format '%1'invalid or incompatible with argument."我把全部的代码都付上了(包括调用dll的单元文件).救命啊!!!
//文件名为checkpassword.dpr;编译此文件生成checkpassword.dll
library checkpassword;
uses
SysUtils, Classes, Unit1 in 'Unit1.pas' {Form1};
exports
checkpwd name 'checkpwd';//声明DLL函数
{$R *.RES}
begin
end.file://文件名为unit1.pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
password: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
flag:boolean;//返回输入密码是否正确
rightpwd:string;//记录输入参数(正确的密码)
function checkpwd(pwd:string):boolean;export;//声明DLL函数
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if password.text=rightpwd then
flag:=true;
form1.close;
end;function checkpwd(pwd:string):boolean;export;
begin
flag:=false;
rightpwd:=pwd;//读入正确的密码值
form1:=Tform1.create(Application);//创建密码验证窗口
form1.ShowModal;//显示窗口
checkpwd:=flag;
form1.free;//释放资源
end;
end.file://主程序main.pas,调用DLL
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
jieguo: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function checkpwd(pwd:string):boolean;external 'project1.dll' ;//函数说明
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if checkpwd('taoyypp') then//调用函数
jieguo.text:='true'
else
jieguo.text:='false';
end;
end.
//文件名为checkpassword.dpr;编译此文件生成checkpassword.dll
library checkpassword;
uses
SysUtils, Classes, Unit1 in 'Unit1.pas' {Form1};
exports
checkpwd name 'checkpwd';//声明DLL函数
{$R *.RES}
begin
end.file://文件名为unit1.pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
password: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
flag:boolean;//返回输入密码是否正确
rightpwd:string;//记录输入参数(正确的密码)
function checkpwd(pwd:string):boolean;export;//声明DLL函数
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if password.text=rightpwd then
flag:=true;
form1.close;
end;function checkpwd(pwd:string):boolean;export;
begin
flag:=false;
rightpwd:=pwd;//读入正确的密码值
form1:=Tform1.create(Application);//创建密码验证窗口
form1.ShowModal;//显示窗口
checkpwd:=flag;
form1.free;//释放资源
end;
end.file://主程序main.pas,调用DLL
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
jieguo: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function checkpwd(pwd:string):boolean;external 'project1.dll' ;//函数说明
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if checkpwd('taoyypp') then//调用函数
jieguo.text:='true'
else
jieguo.text:='false';
end;
end.
%1没有这格式的
%s,%d,%f等
library checkpassword;
uses
ShareMem,//必须放在第一位
...在用这个dll的工程中也要引用ShareMem,也是放在drp文件uses的第一位
2.
function checkpwd(pwd:string):boolean;export;
改为
function checkpwd(pwd:string):boolean;stdcall;
是不是我的delphi7有问题啊