2012-03-12 11 views
0

インターネット上のどこでもこの情報を見つけることができません。パラメータと変数に同じ名前を使用する

私はポインタのリストを得ました。私は、ポインタからGetWIndowText法により必要とされるHWNDにキャストしようとしている

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 ...?

私はインターネットのコードに従っています。

+0

'var hwnd:HWND;' delphiコードは大文字ではないので、 'hwnd' varは' HWND'型と同じ名前なのでエラーです。別のvar名を使用します。 – teran

+0

また、 'HWND = LongWord'あなたは整数へのポインタが必要ですか?つまり、ポインタリストは整数(HWND)リスト – teran

+1

@teranでなければなりません。これは正しくありません。 'HWND'はポインタと同じ幅です。 –

答えて

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

それはポストのタイプミスで、バランスのとれた括弧でも同じことを投げます。また、HWNDを宣言してhwnd:= HWND(PointerList [i])しようとすると、Missing演算子やセミコロンがスローされてしまいました...ああ待っています.... –

+0

今後もコピー/実際のコードを参照してください。 –

+0

あなたは正しいのですが、それはパラメータと変数名の競合のためです(私はポストのコードを単純にしているので、コピーの貼り付けを使用していません。また、元のコードは英語ではありません) –

0

あなたはポインタの後に曲折アクセントを追加することができます。

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

"circumflex accent" ==逆参照演算子 – OnTheFly

+0

どういう意味ですか?私は理解できませんでした... –

+0

アクセントではなく、オペレーターです。小さな十字形の追加と同じ、面白い小さな星は乗算を意味します^はポインタ逆参照を意味します。 – OnTheFly

0

ための答えとしてこれを投稿しますコメントで十分なテキストが得られるようになりました

私は、この問題をSCOPEといいます。

のは、あなたが「行方不明演算子またはセミコロン」エラー発生し、次のコードを持っていると言う:「、あなたはGetWindowTextでHWNDの上にマウスカーソルを置くと、デバッグ先端として

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

をあなたに"Var HWND:Cardinal - Unit1.pas(100)"のようなツールチップが得られます.100は行番号です。基本的に、コンパイラは、Windows.pasのWindows HWND型ではなく、関数内の関数HWNDパラメータを「認識」します。

このテクニックを使用すると、コンパイラのように、各アイテム(関数、タイプ、変数など)が実際に指しているもの、を正確に検証できます。

関連する問題