如果我不存储GetModuleHandle的返回值,是否需要关闭句柄?

3 winapi

我在想,如果我不得不关闭句柄例如如果我是叫GetModuleHandle这样

GetProcAddress(GetModuleHandle("modulename"),  "nameoftheexportedfunction")
Run Code Online (Sandbox Code Playgroud)

什么是关闭手柄的正确方法?我需要做什么吗

HMODULE hModule = GetModuleHandle("modulename"); 
GetProcAddress(hModule, "nameoftheexportedfunction")
CloseHandle(hModule);
Run Code Online (Sandbox Code Playgroud)

或者,如果返回的值GetModuleHandle未存储到变量中,它会自动删除吗?

IIn*_*ble 9

GetModuleHandle返回一个HMODULE(又名HINSTANCE- 看看HINSTANCE和HMODULE之间有什么区别?).此数据类型无法传递给CloseHandle.

HMODULE可传递给FreeLibrary则但这不是必需的,因为相关GetModuleHandle不增加模块的引用计数.实际上,调用FreeLibrary可能会导致模块过早地未映射,从而导致严重的崩溃.

简而言之:GetModuleHandle返回一个只读值,不需要以任何方式处理掉.您问题中的第一行代码很好.