我有一个包装类,它包装DLL中的函数。当然,我使用LoadLibrary
和FreeLibrary
来加载和释放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()之后我就会出现这些错误。有人有想法吗?