1

我有一个将函数包装在 DLL 中的包装类。自然,我使用LoadLibraryandFreeLibrary来加载和释放 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
    }
}

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

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

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

在这种情况下,我的调试器显示它执行了 FreeLibrary 并跳转到该mAVTCamLibrary = NULL;行,然后该行将导致Access Violation Error

如果我摆脱了这mAVTCamLibrary = NULL;条线(我最初这样做是因为我认为这条线导致了错误),那么无论我的调试器在 FreeLibrary() 之后跳转到什么位置都会导致访问冲突错误。

我无法弄清楚为什么我在调用 FreeLibrary() 后会立即收到这些错误。有人有想法吗?

4

0 回答 0