urenai 发表于 2023-12-22 21:36:46

不用dllmain获取模块自身句柄

本帖最后由 urenai 于 2023-12-22 22:54 编辑


有什么好办法吗?


static/image/hrline/4.gif


忘记贴代码了!!!
除了下述方式,还有别的办法吗?
仅讨论手段?

<火山程序 类型 = "通常" 版本 = 1 />

方法 取当前模块句柄 <公开 静态 类型 = 变整数 返回值注释 = "返回模块句柄" @禁止流程检查 = 真 @视窗.外部头文件 = "psapi.h" @视窗.外部库 = "Psapi.lib">
参数 文件名 <类型 = 文本型 注释 = "返回文件名" @默认值 = 空对象>
参数 路径 <类型 = 文本型 注释 = "返回路径" @默认值 = 空对象>
{
    @ static HMODULE hModule = 0;
    @ if (!GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCWSTR)&hModule,(HMODULE *)&hModule)){return 0;}
    @ if (!hModule){return 0;}
    @ char szProcessName={},szModName={};
    @ if (GetModuleBaseNameW((HANDLE)-1,hModule,(LPWSTR)szProcessName,1024)){@<文件名>.SetText ((const TCHAR*)szProcessName);}
    @ if (GetModuleFileNameW(hModule,(LPWSTR)szModName,1024)){@<路径>.SetText ((const TCHAR*)szModName);}
    @ return (INT_P)hModule;
}

fengshangren 发表于 2023-12-22 21:47:01

GetModuleHandleExW 这个API可以直接取,看看文档怎么用的

呵呵仙8 发表于 2023-12-22 21:56:38

API呗!参考这个
https://bbs.125.la/forum.php?mod=viewthread&tid=14055939&extra=

urenai 发表于 2023-12-22 22:47:03

呵呵仙8 发表于 2023-12-22 21:56
API呗!参考这个
https://bbs.125.la/forum.php?mod=viewthread&tid=14055939&extra=

我更新了帖子哦

urenai 发表于 2023-12-22 22:47:50

fengshangren 发表于 2023-12-22 21:47
GetModuleHandleExW 这个API可以直接取,看看文档怎么用的

我更新了帖子哦

793359277 发表于 2023-12-22 23:23:16

本帖最后由 793359277 于 2023-12-22 23:32 编辑


<火山程序 类型 = "通常" 版本 = 1 />

方法 取当前模块句柄 <公开 静态 类型 = 变整数 @嵌入式方法 = "">
{
    @ (INT_P)_AtlBaseModule.GetModuleInstance()
}


urenai 发表于 2023-12-23 13:26:02

793359277 发表于 2023-12-22 23:23
方法 取当前模块句柄
{
    @ (INT_P)_AtlBaseModule.GetModuleInstance()


不具备通用性,淘汰。

我好像有点印象,好像是在线程上下文 还是什么结构里,存了相关参数。
其中包含了模块句柄。记不太清了。
页: [1]
查看完整版本: 不用dllmain获取模块自身句柄