调用构造函数时与mfc相关的崩溃

MFC-related crash when calling constructors

本文关键字:崩溃 mfc 构造函数 调用      更新时间:2023-10-16

我目前正在visual studio中使用MFC和CLR编写应用程序,每当我调用我编写的类的构造函数(该类是通过USB控制相机)时,我的程序就会崩溃。

我有一个基类CameraBase:

class CameraBase
{
public:
    virtual bool getFrame(cv::Mat& outImage) { return true; };
};

和派生类LumeneraCamera(用于特定的相机):

class LumeneraCamera : public CameraBase
{
public:
    DLL_API LumeneraCamera();
    DLL_API bool connect(int cameraNum);
    DLL_API bool disconnect();
    DLL_API bool getFrame(cv::Mat& outImage);
private:
    //Bunch of misc variables
};

这些类被编译成DLL并从另一个程序访问:

int main()
{
    cout << "Initing camera" << endl;
    camera = new LumeneraCamera();
    //More operations
}

当我运行程序时,它打印Initing camera,然后由于dlinit .cpp(第133行:VERIFY(AfxInitExtensionModule(controlDLL, hInstance));)中的断言而失败。它在构造函数中执行任何操作之前就崩溃了。我不确定问题是什么,但它似乎与MFC有关,所以我目前正在研究从MFC完全解开我的项目。任何建议或修复都很感激!

根据MSDN,如果您的DLL与MFC DLL动态链接,从该DLL导出的每个调用MFC的函数必须在函数的开头添加AFX_MANAGE_STATE宏:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

我最终通过禁用MFC解决了这个问题-一个我使用建议的MFC库,但据我所知,没有它就可以正常工作。