当程序调用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);
}
由于 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
当程序调用dll时获取dll路径,DLL中获取自身的句柄的更多相关文章
- asp.net 类库中获取session c#类中获取session
asp.net 类库中获取session c#类中获取session 1. 先引入命名空间 using System.Web; using System.Web.SessionState; 在使用H ...
- ajax异步处理时,如何在JS中获取从Servlet或者Action中session,request
ssh项目中,我需要登陆某个页面(如a.jsp),通过onblur()鼠标失去焦点后来触发js函数(函数是ajax请求)请求到相应的action,处理完成后将数据存放到session对象里面,然后在a ...
- C# 创建Dll文件供程序调用方法
C# 创建Dll文件供程序调用方法 使用C#创建动态Dll文件方法: 1. 在VS2017环境下,新建-项目-选择类库类型: 2. 新创建一个.cs文件(如test.cs),编写代码如下: usin ...
- 摘:LIB和DLL的区别与在VC中的使用
共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数 ...
- DLL文件是怎么产生的,DLL文件是什么,DLL文件有什么用
①DLL文件是怎么产生的 许多应用程序被分割成一些相对独立的动态链接库,放置于系统中,就产生了DLL文件. ②DLL文件是什么 DLL(Dynamic Link Library)文件为动态链接库文件, ...
- Java获取各种路径
(1).request.getRealPath("/");//不推荐使用获取工程的根路径(2).request.getRealPath(request.getRequestURI( ...
- JAVA中获取路径
内容来自于snannan_268 关键字: java中获取路径 JAVA中获取路径: 1.jsp中取得路径: 以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.get ...
- ios中从相册:相机中获取图片信息
ios中从相册/相机中获取图片信息 从相册中获取图片的信息 UIImagePickerController *imgPickView = [[UIImagePickerController alloc ...
- spring的普通类中获取session和request对像
在使用spring时,经常需要在普通类中获取session,request等对像. 1.第一钟方式,针对Spring和Struts2集成的项目: 在有使用struts2时,因为struts2有一个接口 ...
- SpringMvc4中获取request、response对象的方法
springMVC4中获取request和response对象有以下两种简单易用的方法: 1.在control层获取 在control层中获取HttpServletRequest和HttpServle ...
随机推荐
- java做微信支付notify_url异步通知服务端的写法
最近团队在接入微信支付,APP和JSAPI的接口都需要填写一个notify_url回调地址,但是坑爹的官方文档并没有找到JSAPI模式的java版的demo,所以不得不自己看文档写了一个接受微信异步通 ...
- Linux调试工具
1. 使用printf调试 #ifdef DEBUG Printf(“valriable x has value = %d\n”, x) #endif 然后在编译选项中加入-DDEBUG 更复杂的调试 ...
- Android开发小知识
修改Android app图标(Android Studio) 1. res\drawable 放置icon.png(此图片是你需要修改的图标); 2. 修改AndroidManifest.xml ...
- CUDA查询和选取设备信息
CUDA查询设备信息 CUDA C中的cudaGetDeviceProperties函数可以很方便的获取到设备的信息,函数原型是: cudaError_t CUDARTAPI cudaGetDevic ...
- android隐藏显示小键盘
记录一下开发中虚拟键盘的使用,fragment和activity中不同的使用 fragment下点击其它位置隐藏小键盘,复制到initView()方法中 view.setOnTouchListener ...
- 认识ADO.net
这篇文章源自对刘皓的文章的学习 ADO.NET入门教程(一) 初识ADO.NET 这篇文章非常好,用一张图,以及对图的解释介绍了ado.net组件 ado.net内部主要有两个部分 dataProvi ...
- 《The Economist》的阅读
cover story(封面故事): Clean energy's dirty secret:清洁能源的肮脏幕后: 0. 词汇 respite:n. 缓解:暂缓:暂时的休息:缓期执行:也作及物动词(v ...
- Matlab随笔之判别分析
原文:Matlab随笔之判别分析 从概率论角度,判别分析是根据所给样本数据,对所给的未分类数据进行分类. 如下表,已知有t个样本数据,每个数据关于n个量化特征有一个值,又已知该样本数据的分类,据此,求 ...
- WPF Timeline简易时间轴控件的实现
原文:WPF Timeline简易时间轴控件的实现 效果图: 由于整个控件是实现之后才写的教程,因此这里记录的代码是最终实现后的,前后会引用到其他的一些依赖属性或者代码,需要阅读整篇文章. 1.确定T ...
- 怎样开始GO编程?
如果你想开始学习GO语法前,请先背熟下述4点: 1. 环境变量: 使用go env查看环境变量 GOARCH/GOHOSTARCH: 体系架构, amd64或386 GOOS/GOHOSTOS: 操作 ...