对params和变量使用相同的名称

时间:2012-03-12 10:02:42

标签: delphi winapi

无法在互联网上找到任何信息。

我得到了一个指针列表。我正在尝试从指针转换为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; - 期望的常量或类型标识符... erm ...?

我正在关注互联网上的一些代码。

3 个答案:

答案 0 :(得分:6)

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

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);

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

发布此作为答案,因为评论现在允许足够的文字

我认为指出这里的问题称为SCOPE是有益的。

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

procedure DoSomething(HWND: THandle);
var
  text: string;
  someArray: array[0..256] of char;
begin
  text := GetWindowText(HWND(PointerList[i]), someArray, 256);
end;

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

使用这种技术,您可以准确地验证每个项目(函数,类型,变量等)确实指向的内容,,如编译器所示。