0
dllManager.LoadFun(@"user32", "GetAsyncKeyState");
object tempFlag = dllManager.Invoke(ObjArray_Parameter, TypeArray_ParameterType, ModePassArray_Parameter, Type_Return, "GetAsyncKeyState");
r = (int)tempFlag;
llManager.UnLoadDll(); 

public void UnLoadDll()
{
    FreeLibrary(hModule);
    hModule = IntPtr.Zero;
    farProc = IntPtr.Zero;
}

dllManager.UnloadDll()好像不行,内存没有释放,因为我再次调用DLL时,它会继续增加内存。如何释放内存?

4

2 回答 2

1

一般来说,你声明一个extern函数,不用太担心内存使用。无论如何,Windows 在内部都使用这个 DLL。

[DllImport("User32.dll")]
private static extern short GetAsyncKeyState(System.Windows.Forms.Keys key);

private void button1_Click(object sender, EventArgs e)
{
    short state = GetAsyncKeyState(Keys.D);
    switch (state)
    {
        // ?
    }
}

另请参阅
http://www.pinvoke.net/default.aspx/user32.getasynckeystate

于 2012-12-06T04:14:03.237 回答
0

您可以在应用程序域中加载该链接库,然后卸载该应用程序域。

于 2012-12-06T04:08:59.733 回答