Windowsのデバイスコンテキストハンドル(HDC)の取りうる値についての資料はありますか? (Win95〓XPを想定しています)

既存のライブラリを流用する上で、HDCにインチキして別の意味の値をもたせられると大変楽が出来るのです。でも、本来の用途の値と被るとまずいので、この質問をしました。
どう考えても邪道な方法なので将来の互換性とかいろいろアレですが、なにか参考になる資料がありましたら教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/12 10:51:29
  • 終了:--

回答(1件)

id:nzg No.1

nzg回答回数26ベストアンサー獲得回数32006/01/12 22:48:29

ポイント60pt

リンク先、およびその周辺のドキュメントを見る限り、特にハンドルの値として有効な形式は規定されていないようです。

そこでヘッダファイルを見ると、


// winnt.h

#ifdef STRICT

typedef void *HANDLE;

#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name

#else

typedef PVOID HANDLE;

#define DECLARE_HANDLE(name) typedef HANDLE name

#endif

typedef HANDLE *PHANDLE;


// windef.h

DECLARE_HANDLE(HDC);


なので型は「void *」。キャストして数値を突っ込めばいいでしょう。

蛇足ながら注意点としては64bit環境、32bit環境でサイズが変わってまう事。どのような邪道を考えているのか分かりませんが :-) ポインタ以外の数値を受け渡すのであれば、4GB以下の数値に抑え、設定側、取得側でそれを意識したコーディングをしたほうがよさそうです。健闘を祈ります。

id:fslasht

回答ありがとうございます。

さすがに仕様では決まってなさそうですね。実際の挙動(割り当てられたハンドル番号)を調べて考えるとします。

型は、32bit値をvoid*にキャストでほおりこめばよさそうですね。

2006/01/16 10:14:52

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません