我需要从我的DLL加载一些资源(我需要从DLL代码加载它们),为此我正在使用FindResource.
要做到这一点,我需要DLL的HModule.怎么找到?
(我不知道DLL的名称(文件名)(用户可以更改它))
Han*_*ant 11
你可以从DllMain()入口点获得它,第一个参数.写一个,将其存储在全局变量中:
HMODULE DllHandle;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) DllHandle = hModule;
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
有一个没有文档的黑客可以在我见过的任何版本的32位和64位Windows上运行.DLL的HMODULE与模块的基址相同:
static HMODULE GetThisDllHandle()
{
MEMORY_BASIC_INFORMATION info;
size_t len = VirtualQueryEx(GetCurrentProcess(), (void*)GetThisDllHandle, &info, sizeof(info));
assert(len == sizeof(info));
return len ? (HMODULE)info.AllocationBase : NULL;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6251 次 |
| 最近记录: |