首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wxWidgets:使用wxGLCanvas/wxGLContext崩溃

wxWidgets:使用wxGLCanvas/wxGLContext崩溃
EN

Stack Overflow用户
提问于 2009-03-18 15:18:07
回答 1查看 1.4K关注 0票数 1

这至少发生在Windows XP上的wxWidgets 2.8.9和2.8.10上,没有在其他patforms上进行测试:

我有两个dll,a.dll和b.dll,它们是在主机定序器中运行的VST插件。它们使用wxWidgets和OpenGL。在初始化时,我在两个插件中调用它(但使用不同的m_width和m_height):

代码语言:javascript
复制
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,主机定序器在调用这条线路后立即关闭(即使在调试期间):

代码语言:javascript
复制
m_canvas->SetCurrent(*m_context);

这就是我在输出中看到的:

代码语言:javascript
复制
"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).
....
EN

回答 1

Stack Overflow用户

发布于 2009-03-18 22:02:40

输出中的错误消息似乎表明您已将wxWidgets静态链接到这两个插件中。只要您只加载一个插件,甚至多次加载,这就可以工作,因为wxWidgets库将只被初始化一次。

但是,如果您试图在第一个插件仍在加载的情况下加载第二个插件,则第二个插件中的wxWidgets初始化将失败,因此迟早会发生崩溃。

您应该使用wxWidgets动态链接这两个插件。谷歌搜索wxWidgets和插件/可加载模块,你应该能够找到关于这个问题的更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/658714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档