1

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

4

0 に答える 0