関数を DLL にラップするラッパー クラスがあります。当然、DLL のロードと解放にはLoadLibrary
andを使用します。FreeLibrary
ラッパー管理オブジェクトが作成されると、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() を呼び出した直後にこれらのエラーが発生する理由がわかりません。誰にもアイデアがありますか?