FreeLibrary()导致访问冲突错误?

时间:2013-04-16 13:39:34

标签: c++ visual-studio-2010 dll wrapper

我有一个包装类,它包装DLL中的函数。当然,我使用LoadLibraryFreeLibrary来加载和释放DLL。当我的包装器管理对象被创建时,它运行Startup()函数:

//at the top
#define AVTCAM_DLL_NAME (L"VimbaBridgeAPI.dll")

//startup()
void CAVTcamDllWrapper::Startup()
{
    mAVTCamLibrary = LoadLibrary(AVTCAM_DLL_NAME);
    if(mAVTCamLibrary == NULL)
    {
        //report an error
    }
}

然后,当包装器管理器被删除时,它会在析构函数中调用shutdown函数:

void CAVTcamDllWrapper::Shutdown()
{
    if(mAVTCamLibrary != NULL)
    {
       FreeLibrary(mAVTCamLibrary);
       mAVTCamLibrary = NULL; //for extra safety
    }
}

这是我的问题:我正在使用的相机可以正常启动。问题出在关机期间,更具体地说,是在FreeLibrary()通话期间。一旦FreeLibrary被调用,下一行代码就会失败。

在这种情况下,我的调试器显示它执行FreeLibrary并跳转到mAVTCamLibrary = NULL;行,然后该行将导致访问冲突错误

如果我摆脱了mAVTCamLibrary = NULL;行(我之前做过这一行,因为我认为这行导致了错误),那么在FreeLibrary()导致访问冲突错误之后我的调试器会跳转到什么地方。 / p>

我无法弄清楚为什么在调用FreeLibrary()之后我就会出现这些错误。有人有想法吗?

0 个答案:

没有答案