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 に答える