wxMessageBox ou wxDialog dans une DLL
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:
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:
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 :
Citation:
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