呵呵,不能通过编译?你是指: “[Hint] Project1.dpr(19): Value assigned to 'a' never used” 这个信息么? 如果是的话,这不叫做不能通过编译,编译通过了,这仅仅是个提示信息,意思是变量a被赋值后再没有使用过,因此此句被编译器优化时去掉了,最终不会编译到dll或者exe中。————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 —————————————————————————————————
a:=pchar(GetUserName); try
谁有兴趣留下Mail,我把程序发过去帮忙调试一下。
“是因为调用GetUserName出现无效指针操作,你的MAIL留下我把程序发给你看看” 不用发了,是因为你的GetUserName的第一个参数(PChar)类型没有分配地址。应该类似如下书写: var P: PChar; begin GetMem(P, MAXBYTE); GetUserName(P, ……); //…… FreeMme(P); end;————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 —————————————————————————————————
谢谢大家,已经解决了。原来是函数声明的问题,小疏忽折磨了我很长时间。一会散分给大家,哈哈dll中声明了stdcall, function Logon(AHandle: THandle; ACaption: PChar): boolean; stdcall; function GetUserName:PChar; stdcall; //ShortString; function GetPassword:PChar; stdcall; function GetProject :PChar; stdcall;而调用部分漏掉了 function Logon(AHandle: THandle; ACaption: PChar): Boolean; external 'LogonDll.dll' name 'Logon'; function GetUserName:PChar; external 'LogonDll.dll' name 'GetUserName'; function GetPassword:PChar; external 'LogonDll.dll' name 'GetPassword'; function GetProject:PChar; external 'LogonDll.dll' name 'GetProject';
“[Hint] Project1.dpr(19): Value assigned to 'a' never used”
这个信息么?
如果是的话,这不叫做不能通过编译,编译通过了,这仅仅是个提示信息,意思是变量a被赋值后再没有使用过,因此此句被编译器优化时去掉了,最终不会编译到dll或者exe中。—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
try
不用发了,是因为你的GetUserName的第一个参数(PChar)类型没有分配地址。应该类似如下书写:
var
P: PChar;
begin
GetMem(P, MAXBYTE);
GetUserName(P, ……);
//……
FreeMme(P);
end;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
begin
Result:=FUserName;
end;第二次:
function GetUserName:Pchar;
begin
Result:=Pchar(FUserName);
end;第三次:
function GetUserName:Pchar;
begin
GetMem(Result, Length(FUserName));
StrCopy(Result, FUserName);
end;我现在不知到调用dll是否必须传递PChar、返回PCHAR,资料上说可以用shortstring。
下面的调用,如果传入Sting调用成功但窗体标题为乱码,但如果传入PCHAR则编译不通过。
function Logon(AHandle: THandle; ACaption: PChar): boolean;
var
LogonForm: TLogonForm;
begin
Check := False;
Application.Handle := AHandle;
LogonForm := TLogonForm.Create(Application);
try
LogonForm.Caption := ACaption; //此处显示不正常,乱码
LogonForm.ShowModal; //返回给调用本dll的应用程序判断
Result:=Check;
finally
LogonForm.Free;
end;
end;
function Logon(AHandle: THandle; ACaption: PChar): boolean; stdcall;
function GetUserName:PChar; stdcall; //ShortString;
function GetPassword:PChar; stdcall;
function GetProject :PChar; stdcall;而调用部分漏掉了
function Logon(AHandle: THandle; ACaption: PChar): Boolean; external 'LogonDll.dll' name 'Logon';
function GetUserName:PChar; external 'LogonDll.dll' name 'GetUserName';
function GetPassword:PChar; external 'LogonDll.dll' name 'GetPassword';
function GetProject:PChar; external 'LogonDll.dll' name 'GetProject';