Dies geschieht zumindest mit wxWidgets 2.8.9 und 2.8.10 unter Windows XP, nicht auf andere patforms testen:WxWidgets: Crash mit wxGLCanvas/wxGLContext
Ich habe zwei DLLs, a.dll und b.dll Dies sind VST-Plugins, die in einem Host-Sequencer ausgeführt werden. Sie verwenden wxWidgets und OpenGL. Bei der Initialisierung, nenne ich dies in beiden Plugins (aber mit unterschiedlichen m_width und m_height):
MyControl(..)
{
..
m_canvas = new wxGLCanvas(this, wxID_ANY, 0, wxPoint(0, 0), wxSize(m_width, m_height));
m_context = new wxGLContext(m_canvas);
..
m_canvas->SetCurrent(*m_context);
}
void MyControl::onPaint(wxPaintEvent& event)
{
m_canvas->SetCurrent(*m_context);
wxPaintDC dc(m_canvas);
..
m_canvas->SwapBuffers();
}
Diese Ordnung, solange ich nur offen a.dll oder b.dll funktioniert. Das Öffnen mehrerer Instanzen von a.dll oder b.dll funktioniert auch einwandfrei. Doch sobald ich a.dll und b.dll zugleich geöffnet, schaltet sich der Host-Sequenzer sofort nach unten, nachdem diese Zeile Aufruf (auch während des Debuggens):
m_canvas->SetCurrent(*m_context);
Das ist, was ich auf der sehen Ausgang:
"host.exe": "D:\something\b.dll" geladen, Symbole wurden geladen.
14:49:02: ..\..\src\msw\app.cpp(364): 'RegisterClass(frame)' failed with error 0x00000582 (klasse ist bereits vorhanden).
14:49:03: ..\..\src\msw\app.cpp(373): 'RegisterClass(no redraw frame)' failed with error 0x00000582 (klasse ist bereits vorhanden).
14:49:03: ..\..\src\msw\app.cpp(383): 'RegisterClass(MDI parent)' failed with error 0x00000582 (klasse ist bereits vorhanden).
14:49:03: ..\..\src\msw\app.cpp(392): 'RegisterClass(no redraw MDI parent frame)' failed with error 0x00000582 (klasse ist bereits vorhanden).
....