3

我正在对非托管 dll 的 ac# 绑定进行测试。我如何编写测试,确保.dll 已卸载并再次加载以进行下一次测试,以便 dll 代码中的任何状态都不会传递到下一次测试?

dll 方法是使用 DllImport 属性导入的。

解决方案:

我的 dll 在静态构造函数中进行了一些初始化,所以我必须在再次卸载它后调用这个初始化代码。所以代码如下所示:

    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 回答