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); }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
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); }
"le programme appellant à généré un point d'arrêt"
le debbuger fournti l'explication suivante :
Cette erreur d'execution ne se produit pas si je n'appelle pas de fenetreassert "wxThread::IsMain()" failed in wxMutexGuiLeaveOrEnter(): only main thread may call wxMutexGuiLeaveOrEnter()! [in child thread]
ACCallDll.exe a déclenché un point d'arrêt
Et je n'y comprends rien ...
Merci de votre aide
Partager