Bonjour,

Je développe une DLL qui doit, à partir d'une fonction globale, fournir une fenetre de dialogue

Pour l'instant j'arrive à appeller ma fonction globale dans ma DLL

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void MyFrame::OnMenuCommand(wxCommandEvent& WXUNUSED(event))
{
  // Load up the DLL
  HMODULE hModule = LoadLibrary(_T("maDll.dll"));
  HWND hWnd =(HWND)this->GetHandle();
 
  // Call function in DLL
  DLLTotoPtr pProc = (DLLTotoPtr)GetProcAddress(hModule,_T("DLLToto"));
  (pProc)(hWnd);
  FreeLibrary(hModule);
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
extern "C" IMPORT_EXPORT void DLLToto(HWND handle)
{
        wxWindow win;
        win.SetHWND((WXHWND)handle);
        win.Enable(false);
 
        wxDialog dlg(&win, -1, wxT("wxDialog in DLL"), wxDefaultPosition, wxSize(150,150));
        dlg.ShowModal(); // <- plantage à cette ligne
 
        win.Enable(true);
        win.SetHWND(0);
}
Mais lorsque j'essaye d'afficher un wxMessageBox ou un wxDialog à partir de ma fonction globale dans ma DLL, j'obtiens une erreur à l'execution
"le programme appellant à généré un point d'arrêt"
le debbuger fournti l'explication suivante :
assert "wxThread::IsMain()" failed in wxMutexGuiLeaveOrEnter(): only main thread may call wxMutexGuiLeaveOrEnter()! [in child thread]
ACCallDll.exe a déclenché un point d'arrêt
Cette erreur d'execution ne se produit pas si je n'appelle pas de fenetre
Et je n'y comprends rien ...
Merci de votre aide