* SetWindowLong(myForm.hWnd、GWL_HWNDPARENT、parentHwnd)*がハングするのはなぜですか?SetWindowLong Hanging
この3つのステップを一貫して再現できます。通過.NET形態はVB6で
- Initalizeを
- WaitWindow COMオブジェクトを.NETフォームを作成し、
SetWindowLong関数のメソッドを呼び出すCOMオブジェクト上のShowWindowを呼び出すCの# Windowsアプリケーション(ハング)
C#コンソールアプリケーション(いないハング)
private static void Main(string[] args)
{
IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
Interop.WaitWindow waitWindow = new Interop.WaitWindow();
waitWindow.ShowWindow(handle.ToInt32(), Language.RISEnglish);
}
VB6コードスニペット
Public Sub ShowWindow(ByVal parentHwnd As Long, ByVal language As Language)
SetWindowLong(myForm.hWnd, GWL_HWNDPARENT, parentHwnd) 'Hangs Here
CenterWindow (parentHwnd)
myForm.ShowRetrieving (language)
myForm.Show (vbModal)
End Sub
本当にあなたの助けをいただければ幸いです:)
EDITを
I SetWIndowLongをbにしないでください。親を変更するために呼び出されましたが、.NETフォームハンドルが使用されている場合にのみハングする理由を理解しようとしています。
EDIT2
私は今、問題はSetWindowLong関数が、実際のハンドル自体には関係しないと考えています。私はまだ調査中ですが、.NETからVB6コードを呼び出すと、RPCスレッドが作成されるように見えます。私はまだ分かりませんが、クロススレッディングの問題と関係があると感じています。
注:これは既存のシステムの一部であり、この特定の条件まで「細かい」作業を行っているため、コードのVB6部分を更新できません。 – silentfrost