Это происходит, по крайней мере, с wxWidgets 2.8.9 и 2.8.10 на Windows XP, не проверял на других паттернах:
У меня есть два dll, a.dll и b.dll, которые являются плагинами VST, работающими в секвенсоре хоста. Они используют wxWidgets и OpenGL. При инициализации я вызываю это в обоих плагинах (но с разными m_width и 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();
}
Это прекрасно работает, пока я открываю только a.dll или b.dll. Кроме того, открытие нескольких экземпляров a.dll или b.dll работает нормально. Однако, как только я открываю a.dll и b.dll одновременно, секвенсор хоста немедленно завершает работу после вызова этой строки (даже при отладке):
m_canvas->SetCurrent(*m_context);
Вот что я вижу на выходе:
"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).
....