使用wxMathPlot作为DLL时,wxWidgets无法在Windows上注册窗口类 我正在编写C++中的跨平台应用程序,它正在创建一些绘图。对于GUI,我使用wxWidgets 3.1.3,对于绘图,我使用wxMathPlot

使用wxMathPlot作为DLL时,wxWidgets无法在Windows上注册窗口类 我正在编写C++中的跨平台应用程序,它正在创建一些绘图。对于GUI,我使用wxWidgets 3.1.3,对于绘图,我使用wxMathPlot,c++,windows,dll,wxwidgets,C++,Windows,Dll,Wxwidgets,在linux上它工作得很好,但在Windows上我遇到以下错误: ...\src\msw\window.cpp[3994]:assert "wclass" failed in wxWindow::MSWCreate(): failed to register window class? 我正在使用VisualStudio2019。该错误在调试和发布时都存在,但仅当我使用wxMathPlot作为DLL时才存在 我试图重新编译wxWidgets,并将wxWidgets中的适当表

在linux上它工作得很好,但在Windows上我遇到以下错误:

...\src\msw\window.cpp[3994]:assert "wclass" failed in wxWindow::MSWCreate(): failed to register window class?
我正在使用VisualStudio2019。该错误在调试和发布时都存在,但仅当我使用wxMathPlot作为DLL时才存在

我试图重新编译wxWidgets,并将wxWidgets中的适当表添加到wxMathPlot项目,但我得到了相同的错误

项目并不要求使用wxMathPlot作为DLL,但我很好奇为什么会发生这种行为


不清楚是否也将wxWidgets用作DLL,但确实需要这样做才能使其正常工作,即在编译和链接DLL导入库时,mathplot DLL和主应用程序都必须定义
WXUSINGDLL
。否则,您将在同一进程中得到同一静态库的两个副本,这可能会产生许多问题。

默认情况下,每个模块都会私自注册窗口类,并且只有该模块才能创建该类的窗口。虽然您可以注册“全局”窗口类(这里的“全局”对调用进程来说是全局的),但您可以从进程中的任何位置创建窗口,尽管您仍然必须传入正确的模块句柄。同一静态库的多个副本可能会导致各种错误,尽管问题中的错误不是其中之一。