见鬼了啊,从来没有见过这样的问题

yypp 2001-08-04 12:03:52
一个获取WIN9X用户名的函数,没有参数,返回一个字符串,在程序里各个地方调用都用得好好的,可以获取到用户名
但是在POPMENU的里调用获取到的是空串。

function TMainForm.GetWUserName:AnsiString;
var
lpName: PAnsiChar;
lpUserName: PAnsiChar;
lpnLength: DWORD;
begin
Result := '';
lpnLength := 0;
WNetGetUser(nil, nil, lpnLength); if lpnLength > 0 then
begin
GetMem(lpUserName, lpnLength);
if WNetGetUser(lpName, lpUserName, lpnLength) = NO_ERROR then
Result := lpUserName;
FreeMem(lpUserName, lpnLength);
end;
end;

我实在是想不出问题出在哪里了
...全文
66 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yypp 2001-08-04
  • 打赏
  • 举报
回复
我是声明在PUBLIC里的。。。在另外一个单元里调用。。

实在是搞不定,我已经换了一个方法
wen_zang 2001-08-04
  • 打赏
  • 举报
回复
我照着做,我的没问题啊。。。。。
不过,我把:
function TMainForm.GetWUserName:AnsiString;
改为:
function GetWUserName:AnsiString;
ch81 2001-08-04
  • 打赏
  • 举报
回复
但是,应该还是你程序的问题,你还没给一个指针赋值,一般就不要
取返问它,返问它,有时可能会出现奇怪的错误
ch81 2001-08-04
  • 打赏
  • 举报
回复
哈哈,咱两是同见鬼拉!我在2000下!
我的结果刚好跟你相反!菜单有用,返回administrator,而按钮则返回为空!
不知道什么事故!莫名其妙!应该是内部传值机制有问题
但是:如果把
if WNetGetUser(lpName, lpUserName, lpnLength) = NO_ERROR then
Result := lpUserName;
FreeMem(lpUserName, lpnLength);
把其中lpname赋为nil,lpname:=nil,则两边都可以!
问题应该就出在这个lpname上!你没赋值,就可能在内部对这个值,有不同的处理!
可能在一些情况下为nil,其它情况为不定值
halfdream 2001-08-04
  • 打赏
  • 举报
回复
你把DELPHI中编译产生的其它文件统统删干净,并把PROJECT中多的路径也删掉,
再编译试试。

5,388

社区成员

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

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