2011-06-17 7 views
2

アプリケーションが最近.net 3.5から.net 4.に切り替えました。切り取られた問題の1つは、GetWindowThreadProcessIdが動作しなくなったことです。GetWindowThreadProcessId(c#.net 4.0)のないウィンドウハンドルからプロセスIDを取得

マイクロソフトでは修正プログラムを提供していますが、それはすべてのお客様のコンピュータにインストールする必要があり、他の問題が発生する可能性があります。私は仕事を好むだろう。

http://support.microsoft.com/kb/982638

問題は、Microsoftによって記載されているように、次のとおりです。

「.NET Frameworkリモート処理アプリケーションでは、MarshalByRefObjectオブジェクトを持っているこのオブジェクトはのIntPtr型を返すメソッドが含まれています。 ストリーム '無効な'の無効な型コード この問題は、リモーティングコードがIntPtr型を処理するために発生します。この問題は、次のエラーメッセージが表示されます。 thのときのプリミティブ型e CLRはIntPtrをシリアル化します。しかし、リモートコードは、後でバイナリフォーマッタがのIntPtrをシリアライズ無効な型としてのIntPtrタイプを扱います。」

をので、選択肢はありますか?私はからプロセスIDを取得するための別の方法がありますウィンドウハンドル?それとも私がこのバグを回避するために、異なる私のIntPtrをマーシャリングすることができますか?

答えて

1

あなたがvoidと戻り値を交換してみましたか?(私はあなたがスレッドIDを必要としないと思うので)

[DllImport("user32.dll", SetLastError=true)] 
static extern void GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 

を代わりに:

[DllImport("user32.dll", SetLastError=true)] 
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 
関連する問題