SetParent()とGetParent()の安全性と安定性

私は私のプログラムで次の関数を使用しています:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr GetParent(IntPtr hWnd);

私の質問です:このアプローチは安全で安定していますか?私の開発マシンはWindows XPです。これまでのところ、私はその使用に関して何の問題も見つけませんでした。さまざまなバージョン(Windows Vista、Windows 7など)、さまざまなCPU(x64)などで問題が発生する可能性があるのだろうか。皆さんはこれに関するいくつかのフィードバックを提供できますか。

前もって感謝します。

ズブロッカ

0
SetParentはかなり厄介な関数ですが、別のスレッドやプロセスに属するウィンドウを一緒に接着するのに酷い虐待を受けます。接着されたものがメッセージに応答しなくなったときに、プロセスを緊張させるための技巧があります。スレッドの安全性も暗くなります。それがあなたに関連するかどうかは、その質問から推測することは不可能です。あなたはwinapiを安定した状態に保つために、Windowsのバージョンから恐れることはほとんどありません。Microsoftのパンとバターです。
追加された 著者 Hans Passant,
ニースハンス、ありがとう。あなたが言及したポイントに関する短いコードレビューを行います!
追加された 著者 Żubrówka,

1 答え

それらのP/invoke宣言は、すべてのバージョンのWindowsで正しいです。 XP/Vista/7および32/64ビットの問題に問題はありません。 IntPtr はプロセスのビット数に応じて32〜64ビットの間で浮動します。これはまさに HWND のために必要なことです。

5
追加された
プロセスのビット数に応じて、32ビットから64ビットの間でIntPtrが+1されます。
追加された 著者 Surjit Samra,
すばらしいです! Davidに感謝します! :)
追加された 著者 Żubrówka,