3

アンマネージ dll の ac# バインディングのテストを行っています。dll コードの状態が次のテストに渡されないように、.dll がアンロードされ、次のテストのために再度ロードされることを確認するテストを作成するにはどうすればよいですか?

dll メソッドは DllImport 属性でインポートされます。

解決:

私のdllは静的コンストラクターで初期化を行うため、再度アンロードした後にこのinitコードを呼び出す必要があります。したがって、コードは次のようになります。

    private static int SDllHandle;
    private static bool SInitializationRequired;

    [SetUp]
    public static void Init()
    {
        SDllHandle = LoadLibrary("my.dll");
        if (SInitializationRequired)
        {
            //do some init code
            SInitializationRequired = false;
        }
    }

    [DllImport("kernel32")]
    static extern int LoadLibrary(string lpLibFileName);

    [DllImport("kernel32")]
    static extern bool FreeLibrary(int hModule);

    [TearDown]
    public static void End()
    {
        //do some release code

        while(FreeLibrary(SDllHandle)) 
        {
            SInitializationRequired = true;
        }
    }
4

1 に答える 1

1

私はこれを試していないので、うまくいくかどうかはわかりませんが、失敗するまでループで FreeLibrary(GetModuleHandle(DLLNAME)) を呼び出してみます。

于 2012-05-11T22:52:00.893 に答える