当程序调用dll时获取dll路径,DLL中获取自身的句柄
当程序调用dll时,获取dll路径的方法:
HMODULE hMod = GetModuleHandle(_T("axload.dll"));
if (hMod != NULL)
{
TCHAR szBuffer[MAX_PATH] = { 0 };
GetModuleFileName(hMod, szBuffer, sizeof(szBuffer)/sizeof(TCHAR)-1);
_DEBUG_OUT("path: %s\r\n", szBuffer);
}
http://blog.csdn.net/tmt123421/article/details/52809612
由于 dll 自身无法执行,需要别的程序调用。
这样就造成了如下问题:如果想在 dll 中获取 dll 自身的路径、名称,就不好办了!
GetCurrentDirectory() 只能获取到调用主程序的路径;
GetModuleFileName() 只能得到 dll 的句柄后才能工作;
- 1
- 2
- 1
- 2
写死在参数里倒是可以用,但是如果改变名称,就会失效,相当于在程序里埋了一颗雷!
HMODULE hMod = GetModuleHandle(_T("ntdll.dll"));
最后终于找到了方法:
方法1:
注意:TRUE会导致DLL引用计数加1,FALSE不会改变引用计数,通常用FALSE
HMODULE GetCurrentModule(BOOL bRef/* = FALSE*/)
{
HMODULE hModule = NULL;
if (GetModuleHandleEx(bRef ? GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS : (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
| GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT), (LPCSTR)GetCurrentModule, &hModule))
{
return hModule;
}
return NULL;
}
方法2:
参考:http://blog.csdn.net/yaosan/article/details/3459756
HMODULE GetSelfModuleHandle()
{
MEMORY_BASIC_INFORMATION mbi;
return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0)
? (HMODULE) mbi.AllocationBase : NULL);
}
======> DLL中如何获取自身的句柄 <======
http://blog.csdn.net/tmt123421/article/details/52813178
分类:
Delphi-Exe
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2015-10-07 白话数字签名(5篇)——解释的真清楚
2015-10-07 坚果云的成长烦恼:互联网巨头乌云笼罩(1年多时间, 坚果云已经拥有接近百万注册用户)
2015-10-07 右键计算机->属性->高级系统设置->高级->环境变量,添加环境变量(推荐)