DLL里怎么获取自身文件名和路径?
本帖最后由 1105110683 于 2026-8-30 02:46 编辑DLL里怎么获取自身DLL文件名和路径? 本帖最后由 cxz7411 于 2026-8-30 10:27 编辑
加载dll时参数中有模块句柄,通过模块句柄再去获取自身文件名和路径,具体使用的api去问ai就行. 取模块目录() 本帖最后由 1105110683 于 2026-8-31 11:48 编辑
叶孤城 发表于 2026-8-30 20:03
取模块目录()
取到的是DLL文件所在目录,没文件名 本帖最后由 叶孤城 于 2026-8-31 12:52 编辑
1105110683 发表于 2026-8-31 11:34
取到的是DLL文件所在目录,没文件名
通过模块句柄调用 GetModuleBaseNameW 是 Windows API 中的一个函数,用于获取指定进程内某个模块的基本名称(Base Name)
GetModuleFileNameExW 是 Windows API 中用于获取指定进程内某个模块的完整路径的函数
用这两个函数就能实现需要的功能了.
叶孤城 发表于 2026-8-31 12:49
通过模块句柄调用 GetModuleBaseNameW 是 Windows API 中的一个函数,用于获取指定进程内某个模块的基本 ...
这样可以吗?
<火山程序 类型 = "通常" 版本 = 1 />
方法 取当前模块完整路径 <公开 静态 类型 = 文本型 注释 = "获取文件完整磁盘路径" 折叠 @禁止流程检查 = 真>
{
变量 结果路径 <类型 = 文本型>
@ HMODULE hMod = _AtlBaseModule.GetModuleInstance();
@ WCHAR szPath = {0};
@ DWORD dwRet = GetModuleFileNameW(hMod, szPath, MAX_PATH);
@ if(dwRet > 0 && dwRet < MAX_PATH)
@ {
@ @<结果路径>.SetText(szPath);
@ }
@ else
@ {
@ @<结果路径>.SetText(L"");
@ }
返回 (结果路径)
}
<火山程序 类型 = "通常" 版本 = 1 />
方法 入口通知 <公开 类型 = 逻辑型 注释 = "动态库的 DllMain 入口函数通知" 折叠 @虚拟方法 = 可覆盖>
参数 模块句柄 <类型 = 变整数 注释 = "动态库自身的模块句柄">
参数 调用原因 <类型 = 整数>
参数 保留指针 <类型 = 变整数>
{
如果 (调用原因 == 1)
{
变量 结果路径 <类型 = 文本型>
@ WCHAR szPath = {0};
@ DWORD dwRet = GetModuleFileNameW((HMODULE)@<模块句柄>, szPath, MAX_PATH);
@ @<结果路径>.SetText(szPath);
调试输出 (结果路径)
}
返回 (父对象.入口通知 (模块句柄, 调用原因, 保留指针))// 调用基础类中的被覆盖虚拟方法
}
页:
[1]