Witam,

Mam następujący problem:
Mam plugin w pliku DLL (DLLka pisana w Visual C++ z użyciem MFC). Udostępnia on między
innymi funkcję LoadDialog() która zwraca mi uchwyt (HWND) do formatki/okienka
z konfiguracją owego plug'a.

W uproszczeniu:

HWND LoadDialog() {
    CDialog* pNewDialog = new CDialog(); /*tworzenie klasy okna*/
    pNewDialog->Create (MAKEINTRESOURCE(IDD_ID_ZASOBU), NULL))
         /*ladowanie okna z zasobow*/
    return pNewDialog->GetSafeHwnd();
}

Aplikacja 'glowna' dostaje ten HWND, konwertuje go sobie na CWnd* poprzez:

FromHandle( HWND_PLUGINU )  

Następnie takie 'coś' jest wrzucane na zakładkę TabControla (ustawiam Parent'a
itp.) i wyswietlene:

ShowWindow(SW_SHOW)

Tak było kiedy oba moduły były pisane w MFC. Problem polega na tym, że pluginy
mają być częścią znacznie większej aplikacji macierzystej, która jest napisana
w .NET (Managed C++). Nie potrafię sobie poradzić właśnie z przejściem z HWND
na coś używalnego z poziomu Managed C++.

Próbowałem podobnie:
Mój HWND zrzutowałem sobie na IntPtr i usiłowałem także wywołać
FromHandle()... ale wygląda na to że nie tędy droga (ew. robię coś źle -
jeżeli chodzi o .NET, to jestem kompletnie zielony). Znalazlem co prawda kilka
poradnikow w google, ale wszystkie dotyczą mieszania MFC z .NETem w jednym pliku.
Czy mógłby mi ktoś poradzić (kawałek kodu?) jak w możliwie bezbolesny sposób
przejść z HWND dialogu na System::TabPage^ (tzn. zapewne
samego tab'a będę musiał stworzyć przez gcnew, ale jak dodać na niego mój
dialog w .NET?). Czy jest to w ogóle możliwe (tzn. takie konwersje MFC<->.NET
zahaczając jeszcze po drodze o WinAPI)?

Chodzi mi mniej więcej o taką ścieżkę konwersji:
CDialog*->CWnd*->HWND--(interfejs_plug<->app)-->Control->TabPage

W skrócie: jak obsłużyć w .NET okno dialogowe mając tylko jego
'niskopoziomowy' uchwyt? (tzn. jak je zadokować w .NETowym tabcontrolu i
pokazać?) W grę wchodziłoby nawet mieszanie kodu 'managed' i 'unmanaged', choć
muszę przyznać, że raczej kiepsko mi to wychodzi). Piszę w VS2005...

Z góry dziękuję za pomoc,

PS. Co prawda piszę w C++, ale uznałem że bliżej tematowi do .NET i C# niż do samego C i stąd wybór tego akurat działu
PPS. Kopię tego posta wysłałem na pl.comp.programming