人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windowsのデバイスコンテキストハンドル(HDC)の取りうる値についての資料はありますか? (Win95〓XPを想定しています)
既存のライブラリを流用する上で、HDCにインチキして別の意味の値をもたせられると大変楽が出来るのです。でも、本来の用途の値と被るとまずいので、この質問をしました。
どう考えても邪道な方法なので将来の互換性とかいろいろアレですが、なにか参考になる資料がありましたら教えてください。

●質問者: fslasht
●カテゴリ:コンピュータ
✍キーワード:Windows XP インチキ コンテキスト デバイス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● nzg
●60ポイント

http://msdn.microsoft.com/library/default.asp?url=/library/en-us...

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

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


// 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以下の数値に抑え、設定側、取得側でそれを意識したコーディングをしたほうがよさそうです。健闘を祈ります。

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ