Delphi 对参数和变量使用相同的名称

Delphi 对参数和变量使用相同的名称,delphi,winapi,Delphi,Winapi,在internet上的任何地方都找不到有关此的信息 我有一份指针清单。我试图从指针转换到HWND,这是GetWIndowText方法所需要的 procedure DoSomething var text: string; someArray: array[0..256] of char; begin text := GetWindowText(HWND(PointerList[i]), someArray, 256); end

在internet上的任何地方都找不到有关此的信息

我有一份指针清单。我试图从指针转换到HWND,这是
GetWIndowText
方法所需要的

    procedure DoSomething
    var
      text: string;
      someArray: array[0..256] of char;
    begin
      text := GetWindowText(HWND(PointerList[i]), someArray, 256);
    end
Delphi不让我编译,因为“缺少运算符或分号”-什么是

我试图声明变量:
var-hwnd:hwnd-需要常量或类型标识符。。。呃


下面是一些来自internet的代码。

对于变量声明,问题是变量名和类型是相同的。您可以通过限定类型来解决此问题:

var
  hwnd: Windows.HWND;
如果实际代码在调用GetWindowText时有一个名为
hwnd
的变量可见,则可能需要在强制转换中执行相同的操作:

text := GetWindowText(Windows.HWND(PointerList[i]), someArray, 256);
问题是您的变量声明隐藏了
Windows.HWND
,并将其替换为名为
HWND
的变量

首先,也许更容易避免名称冲突:

var
  WindowHandle: HWND;
...
text := GetWindowText(HWND(PointerList[i]), someArray, 256);

对于变量声明,问题在于变量名称和类型相同。您可以通过限定类型来解决此问题:

var
  hwnd: Windows.HWND;
如果实际代码在调用GetWindowText时有一个名为
hwnd
的变量可见,则可能需要在强制转换中执行相同的操作:

text := GetWindowText(Windows.HWND(PointerList[i]), someArray, 256);
问题是您的变量声明隐藏了
Windows.HWND
,并将其替换为名为
HWND
的变量

首先,也许更容易避免名称冲突:

var
  WindowHandle: HWND;
...
text := GetWindowText(HWND(PointerList[i]), someArray, 256);

可以在指针后添加扬抑重音:

text := GetWindowText(HWND(PointerList[i]^), someArray, 256);

可以在指针后添加扬抑重音:

text := GetWindowText(HWND(PointerList[i]^), someArray, 256);
(将此作为答案发布,因为注释现在允许足够的文本)

我认为指出这里的问题称为范围是有益的

假设您有以下生成“缺少运算符或分号”错误的代码:

作为调试提示,如果将鼠标光标放在GetWindowText中的HWND上,将得到类似“Var HWND:Cardinal-Unit1.pas(100)”100为行号的工具提示。基本上,编译器“看到”函数中的函数HWND参数,而不是Windows.pas中的Windows HWND类型

使用此技术,您可以准确地验证编译器看到的每个项目(函数、类型、变量等)真正指向的内容。

(将此作为答案发布,因为注释现在允许足够的文本)

我认为指出这里的问题称为范围是有益的

假设您有以下生成“缺少运算符或分号”错误的代码:

作为调试提示,如果将鼠标光标放在GetWindowText中的HWND上,将得到类似“Var HWND:Cardinal-Unit1.pas(100)”100为行号的工具提示。基本上,编译器“看到”函数中的函数HWND参数,而不是Windows.pas中的Windows HWND类型



使用此技术,您可以准确地验证编译器看到的每个项(函数、类型、变量等)真正指向的内容。

这是文章中的一个输入错误,即使它抛出了相同的平衡括号。另外,当我按照您的建议声明HWND并尝试HWND:=HWND(指针列表[I])时,它会抛出缺少的运算符或分号…哦,等等…请您以后使用复制/粘贴,以便我们看到真正的代码。您是对的,这是因为参数和变量名冲突(我没有使用复制粘贴oly,因为我简化了帖子的代码,而且原始代码不是英文的)我理解这一点,如果您必须进行修改,我建议您在IDE中进行修改,并检查您将要发布的内容是否确实显示了您正在描述的问题。这是一个错误,即使有平衡的括号,它也会抛出相同的错误。此外,当我声明HWND时,正如您所建议并尝试的HWND:=HWND(指针列表[i])它会抛出缺少的运算符或分号…哦,等等…请您以后使用“复制/粘贴”以便我们看到真正的代码。您是对的,这是因为参数和变量名冲突(我不是使用“复制粘贴”,因为我正在简化post的代码,而且原始代码不是英文的)我理解这一点,如果您必须进行修改,我建议您在IDE中进行修改,并检查您将要发布的内容是否确实显示了您所描述的问题。
var-hwnd:hwnd;
delphi代码不区分大小写,因此您的
hwnd
var与
hwnd
类型同名,因此它是错误。请使用另一个变量名;另外,
HWND=LongWord
是否需要指向整数的指针?我的意思是,指针列表必须是整数(HWND) list@teran这是不正确的。
HWND
和指针一样宽。@DavidHeffernan,在d2010中
HWND
被声明为
LongWord
,在XE2中它必须是
NativeInt
。我想说的是,
指针列表
必须是
HWND的数组
TList
,所以它不是“指针”列表。不要使用Internet上的codez:-P您下载了一个语法错误-未终止的过程声明。
var-hwnd:hwnd;
delphi代码不区分大小写,因此您的
hwnd
var与
hwnd
类型同名,因此它是错误的。请使用另一个var名称;另外,
hwnd=LongWord
是否需要指向中的指针tegers?我的意思是,指针列表必须是整数(HWND) list@teran这是不正确的。
HWND
和指针一样宽。@DavidHeffernan,在d2010中
HWND
被声明为
LongWord
,在XE2中它必须是
NativeInt
。我想说的是,
指针列表
必须是
HWND的数组
TList
,所以它不是“指针”列表。不要使用互联网上的codez:-P您已经下载了