我用个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.

解决方案 »

  1.   

    是生成dll错误?还是调用的时候错误?
      

  2.   

    dll好象没问题的,编译可以的。
      

  3.   

    我测试了,没有任何错误,如果输入taoyypp,则返回true,否则返回false
      

  4.   

    我重新编译的放在了   http://www.coal.sx.cn/tt.rar,明天删除
      

  5.   

    呵呵问题不在这里的,全局遍历你的工程,找Format函数,这明显是Format函数中的格式参数出错
    %1没有这格式的
    %s,%d,%f等
      

  6.   

    试着按下面方法改下1.引用ShareMem
    library checkpassword;
    uses
      ShareMem,//必须放在第一位
      ...在用这个dll的工程中也要引用ShareMem,也是放在drp文件uses的第一位
    2.
    function checkpwd(pwd:string):boolean;export;
    改为
    function checkpwd(pwd:string):boolean;stdcall;
      

  7.   

    我根本没用format这个函数啊 我试试firef仁兄的  但系统也是提示那个错误啊 
    是不是我的delphi7有问题啊