在动态库内部获取动态库路径
来源:互联网 发布:lol代练价格表淘宝 编辑:程序博客网 时间:2024/06/05 11:20
由于工作中经常与动态库打交道,后来要用到动态库自身当前路径,找了好些资料,都没有太好的,其中一个就是与动态库名字无关的,就是在DllMain中获取,如下:
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
}
else if (dwReason == DLL_PROCESS_DETACH)
{
CString szPath;
GetModuleFileName((HMODULE)hInstance,szPath.GetBuffer(MAX_PATH),MAX_PATH); //获取路径函数
MessageBox(NULL,szPath,"",MB_OK);
szPath.ReleaseBuffer();
}
else if (dwReason == DLL_THREAD_DETACH)
{
AFX_MANAGE_STATE(&afxModuleState);
}
return TRUE;
}
由于DllMain是一个独立的进程,其他进程需要用到它的句柄或变量比较麻烦(进程间句柄拷贝可以实现),不易操作,今天在看Windows核心编程的时候看到可以用GetModuleHandle来获取模块句柄,就尝试了下面的方法结果就真获取到了动态库当前路径,获取代码如下:
HANDLE hDllhandle=GetModuleHandle("当前动态库名");//获取当前模块句柄
if (hDllhandle==NULL)
{
MessageBox(NULL,"获取动态库句柄失败","",MB_OK);
}
char buff[MAX_PATH];
memset(buff,0,MAX_PATH);
GetModuleFileName((HMODULE)hDllhandle,buff,MAX_PATH);//获取当前模块句柄路径
MessageBox(NULL,buff,"动态库路径",MB_OK);
注:如果GetModuleHandle返回值为空,将获取调用动态库的程序的当前路径
详细内容可以查看“Windows核心编程”第四章 4.1.1进程的实例句柄
第一个方法不需要提供动态库的名字,但是适用范围受到进程的限制,而后一种方法需要提供动态库模块名,但是不受进程间限制
也可以利用全局变量theApp来获取当前路径,这是在http://topic.csdn.net/t/20040824/15/3304791.html里看到的
char buff[MAX_PATH];
memset(buff,0,MAX_PATH);
GetModuleFileName(theApp.m_hInstance,buff,MAX_PATH);
这样也能获取到,方法应该有很多,但是限于知识积累,目前能写上去的就这么多了,最后这个是后加的~~
- 在动态库内部获取动态库路径
- 在动态连接库内封装应用程序框架
- 获取动态库的路径
- NSHomeDirectory(); 动态获取路径
- linux 程序、动态库、静态库内部添加版本号和编译时间
- linux程序 动态库 静态库内部添加版本号和编译时间
- C++动态库获取自身路径
- 动态库获取自己的路径
- MFC动态库内部产生对话框不显示的问题
- 在makefile中指定动态库路径
- c++ 动态获取项目路径
- js动态获取文件路径
- 动态获取文件路径或图片路径
- 动态链接库内存分配(转)
- 动态库搜寻路径
- 得到动态库路径
- 添加动态库路径
- 动态库搜索路径
- 开展面试应注意的问题,什么叫做面试,面试的程序
- VB 中颜色互相转换的两个小函数(REG和 VB颜)
- Linux平台Makefile文件的编写基础篇
- 一切归于平静...
- TEST
- 在动态库内部获取动态库路径
- Lunix调试技术
- spring.net 框架分析(三)ContextRegistry.GetContext()
- 基于UDP、TCP协议的C#网络编程之一
- 为FireFox添加IE的方法和属性
- vb 实用函数
- oracle取前几条数据语句
- ArcSDE9.3 for Oracle 10g安装和配置连接
- Windows下的Unix/Lunix模拟器 安装