我有一个将函数包装在 DLL 中的包装类。自然,我使用LoadLibrary
andFreeLibrary
来加载和释放 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() 后会立即收到这些错误。有人有想法吗?