* SetWindowLong (myForm.hWnd, GWL_HWNDPARENT, parentHwnd) *가 왜 멈추나요?SetWindowLong Hanging
이 세 가지 단계를 일관되게 수행하여이 문제를 재현 할 수 있습니다.
- 는 .NET 양식을 작성
- Initalize WaitWindow COM 개체는 .NET 양식은 VB6에서
- 가 SetWindowLong에 방법을
C 번호를 호출 처리 통과하면서 COM 개체에이 ShowWindow를 호출 Windows 응용 프로그램 (응답하지 않음)
private static void Main(string[] args)
{
Form form = new Form();
form.Show();
Interop.WaitWindow waitWindow = new Interop.WaitWindow();
waitWindow.ShowWindow(form.Handle.ToInt32(), Language.RISEnglish);
}
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
정말 당신의 도움 :)
편집
I 감사하겠습니다 SetWIndowLong이 b가 아니어야 함을 이해해야합니다. e 부모를 변경하려면 호출하지만 .NET 폼 핸들을 사용할 때만 왜 멈추는 지 이해하려고합니다.
EDIT2
는 지금 문제가 SetWindowLong에 있지만, 실제 핸들 자체에 관련이 없습니다 생각합니다. 아직 조사 중이지만 .NET에서 VB6 코드를 호출하면 RPC 스레드가 만들어집니다. 아직 확실하지 않지만 크로스 스레딩 문제와 관련이 있다는 느낌이 들었습니다.
참고 : 코드의 VB6 부분을 기존 시스템의 일부로 업데이트 할 수 없으며이 특정 조건까지 "미세 조정"되었습니다. – silentfrost