gpt4 book ai didi

delphi - dxComponentPrinter1 的奇怪问题

转载 作者:行者123 更新时间:2023-12-03 03:49:52 25 4
gpt4 key购买 nike

这可能应该发布在“信不信由你”的问题下,但是...一旦我将 dxComponentPrinter1 (devexpress) 放在表单上,​​我的函数就停止工作:

Function GetUserFromWindows: string;
Var
UserName : string;
UserNameLen : Dword;
Begin
UserNameLen := 100;
SetLength(userName, UserNameLen) ;
If GetUserName(PChar(UserName), UserNameLen) Then
Result := Copy(UserName,1,UserNameLen - 1)
Else
Result := 'Unknown';
end;

当我删除它(dxComponentPrinter1)时,它就可以正常工作。当 dxComponentPrinter1 位于表单上时,我得到的错误是这样的:

[dcc32 Error] Unit3.pas(101): E2034 Too many actual parameters [dcc32 Error] Unit3.pas(101): E2012 Type of expression must be BOOLEAN

Delphi XE6 用红色下划线:

GetUserName(PChar(UserName), UserNameLen)

如果我删除该函数,那么一切都可以正常编译。没有错误。以前有人遇到过这种情况吗?

最佳答案

当您将组件添加到表单时,devExpress 单元将添加到您的uses 子句中。该单元定义了一个名为 GetUserName 的函数您的代码现在看到的而不是您想要在 Windows 中声明的代码单元。

您可以通过完全限定对 GetUserName 的调用来处理此问题。要么

Windows.GetUserName

Winapi.Windows.GetUserName

取决于您如何命名 Windows使用时的单位。

就我个人而言,我希望看到这个 GetUserFromWindows在低级单元而不是 GUI 单元中声明的函数。

如果您想创建一个读取用户名并可以处理任意长度名称的函数,那么您可以选择这个可能过度设计的版本:

function UserName: string;
var
Len: DWORD;
begin
Len := 0;
Win32Check(not GetUserName(nil, Len) and (GetLastError=ERROR_INSUFFICIENT_BUFFER));
SetLength(Result, Len-1);
Win32Check(GetUserName(PChar(Result), Len));
end;

请注意,我在这里没有完全限定,因为我假设您会将此函数移动到不使用 dexExpress UI 组件的不同单元中。

关于delphi - dxComponentPrinter1 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25759265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com