DLLメモリからアンロードする方法。FreeLibraryを使用しましたが、まだロードされています
HINSTANCE hGetProcIDDLL = LoadLibrary("path.dll");
f_funci func = (f_funci)GetProcAddress(hGetProcIDDLL, "method");
int x = func();
FreeLibrary(hGetProcIDDLL);
UnmapViewOfFile
とFreeLibraryAndExitThread
を使用しましたが、まだメモリ内にあります
この例では、2つの関数LoadLibrary
とFreeLibrary
が非常にうまく機能することを確認できる短いテストを示します。
_Process Explorer
_ を使用して、DLLが現在のプロセスアドレス空間にロードされているかどうかを示します。
だから私はtest3.dllという名前の非常に単純なdllを作成しました
そして、これを使用する簡単なプログラムは次のとおりです。
_// A simple program that uses LoadLibrary and
// Access test3.dll.
// Then Unload test3.dll
#include <windows.h>
#include <iostream>
typedef int (__cdecl *MYPROC)(LPWSTR);
int main( void )
{
HINSTANCE hinstLib;
BOOL fFreeResult;
// Get a handle to the DLL module.
hinstLib = LoadLibrary(TEXT("test3.dll")); //1: load the DLL
// If the handle is valid, unload the DLL
if (hinstLib != NULL)
{
fFreeResult = FreeLibrary(hinstLib); //2: unload the DLL
}
return 0;
}
_
最初のステップ:
このステートメントを実行すると、次のようになります。
_hinstLib = LoadLibrary(TEXT("test3.dll"));
_
結果は次のとおりです。
Test3.dllがプロセスのアドレス空間にロードされていることがはっきりとわかります_useDLL.exe
_
2番目のステップ:
fFreeResult = FreeLibrary(hinstLib);
ステートメントを実行すると、次の結果が得られます。
ご覧のとおり、DLLは、プロセスuseDLL.exeのアドレス空間にロードされなくなりました。
2つの関数LoadLibrary
とFreeLibrary
はうまく機能します。
このチュートリアルでは、_process Explorer
_ を使用して、特定のプロセスでロードされたDLL)を表示する方法を確認できます。