以下のような型をよく見るのですが、それぞれの型はどういった時に使用するのか教えて頂けませんか?
HWNDはウィンドウハンドルを取得する時によく見るのですが、意味を理解せずに使用しています。
これを機に型の意味を理解したいと思いますので、ご教授お願いします。
・HWND
・THandle
・DWORD
型については、Delphiのヘルプ(IDEからF1キーで表示)
に詳細に記載されていますので、一読してみてください。
THandleや、HWNDも それらの基本型(integerやword)の別名
というか再宣言に過ぎません。
HWNDは、APIを利用する場合に使う慣習があります。
DWORDも同様に APIで慣習として利用します。
THandleは、Delphi固有のものや、そのVCLで使う慣習があります。
型が利用するサイズ(利用するバイト数)が同じであれば、
どの型を使っても不具合が起こることはなく、
キャストして(別の型をかぶせて)利用できます。
MSDNやAPIリファレンス等のドキュメントに記載されている型が
Delphiでも、そのまま利用できたほうがよい でしょうから
基本型を再宣言してそのような型が用意されているのだと思います。
どれも 4 bytes の符号なし整数です。
「名前」が違うのは、コンパイル時にエラーを報告させる、「変数の意味」として、
『バグよけ』にいいと思います。
procedure TForm1.FormCreate(Sender: TObject);
var
TypeHWND: HWND;
TypeTHandle: THandle;
TypeDWORD: DWORD;
begin
Memo1.Lines.Add('HWND : ' + IntTostr(SizeOf(HWND)) + ' bytes');
Memo1.Lines.Add('THandle : ' + IntTostr(SizeOf(THandle)) + ' bytes');
Memo1.Lines.Add('DWORD : ' + IntTostr(SizeOf(DWORD)) + ' bytes');
// マイナス値を代入する場合は、それぞれ符号なし整数なのでキャストする。
// (こんな使い方は普通しませんが・・・)
TypeHWND := HWND(-1);
TypeTHandle := THandle(-1);
TypeDWORD := DWORD(-1);
TypeHWND := TypeTHandle; // キャストしなくても代入可。
end;
あれっ、
> TypeHWND := TypeTHandle; // キャストしなくても代入可。
・・・と言うことで、
>「名前」が違うのは、コンパイル時にエラーを報告させる、
にはならんですね。単に「(人間への)意味」だけか・・。。
思い違いしてました。
整数型同士ならキャストの必要はありませんでしたね。
符号の有る無しで警告が出るぐらいですかね。
みなさん返信ありがとうございます。
>MSDNやAPIリファレンス等のドキュメントに記載されている型が
>Delphiでも、そのまま利用できたほうがよい でしょうから
>基本型を再宣言してそのような型が用意されているのだと思います。
なるほど、DelphiではAPIの型と合わせて、以下のような型が用意されているのですね。
よく理解出来ました。ありがとうございました。
[Delphi] [API]
HWND HWND
THandle HANDLE
DWORD DWORD
ツイート | ![]() |