怎么解决不了,这次谁的代码编译通过分全给他

dyf2001 2003-09-12 10:04:19
http://expert.csdn.net/Expert/topic/1618/1618219.xml?temp=.6791345

原贴内容如上,上次就当散分了。这次希望大家亲自动手试试,谁的代码编译通过并实现上述功能分全部给他。

如果感觉很好的话也加分给大家分。
...全文
57 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovedata 2003-09-14
  • 打赏
  • 举报
回复
也发给我试试吧,hunterpost@163.com
dyf2001 2003-09-14
  • 打赏
  • 举报
回复
怎么这么冷清
dyf2001 2003-09-14
  • 打赏
  • 举报
回复
谢谢大家,已经解决了。原来是函数声明的问题,小疏忽折磨了我很长时间。一会散分给大家,哈哈

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';
大地精灵 2003-09-14
  • 打赏
  • 举报
回复
呵呵,试试,ajq_8036@163.com
yckxzjj 2003-09-13
  • 打赏
  • 举报
回复
我来帮你调试一下如何?yckxzjj@163.com
fengyvn 2003-09-13
  • 打赏
  • 举报
回复
你把SHAREMEM.PAS加到USES中并且为第一个引用的单元,然后把LOGIN过程的ACaption参数换成PCHAR型试试.
dyf2001 2003-09-13
  • 打赏
  • 举报
回复
我的GetUserName没有参数,其实这个函数有过几个版本一直不行。

第一次:

function GetUserName:ShortString;
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;
cmain83 2003-09-13
  • 打赏
  • 举报
回复
cmain83@163.com

给我发一个调试看看.

改好了再发给你.

没改好的话就不好意思...没得了
lxpbuaa 2003-09-13
  • 打赏
  • 举报
回复
FreeMem(P);

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
lxpbuaa 2003-09-13
  • 打赏
  • 举报
回复
“是因为调用GetUserName出现无效指针操作,你的MAIL留下我把程序发给你看看”
不用发了,是因为你的GetUserName的第一个参数(PChar)类型没有分配地址。应该类似如下书写:
var
P: PChar;
begin
GetMem(P, MAXBYTE);
GetUserName(P, ……);
//……
FreeMme(P);
end;

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
dyf2001 2003-09-13
  • 打赏
  • 举报
回复
谁有兴趣留下Mail,我把程序发过去帮忙调试一下。
sy_315 2003-09-13
  • 打赏
  • 举报
回复
a:=pchar(GetUserName);
try
dyf2001 2003-09-13
  • 打赏
  • 举报
回复
说实话时间久了,我都有点记不清了,我在调试一下看看。

大家多帮忙呀!
lxpbuaa 2003-09-12
  • 打赏
  • 举报
回复
呵呵,不能通过编译?你是指:
“[Hint] Project1.dpr(19): Value assigned to 'a' never used”
这个信息么?
如果是的话,这不叫做不能通过编译,编译通过了,这仅仅是个提示信息,意思是变量a被赋值后再没有使用过,因此此句被编译器优化时去掉了,最终不会编译到dll或者exe中。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧