获取DLL的文件路径以及调用DLL的文件路径
如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize)函数来获取,根据hModule参数来辨别是DLL本身还是DLL的调用者。
当hModule 为NULL时候 获取到路径为调用者,当hModule为main入口的
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
中的hModule的时候,获取到的路径是DLL本身的路径。实例效果如下:

DLL文件的核心代码如下:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
TCHAR pCallFileName[MAX_PATH];
TCHAR pDllFileName[MAX_PATH];
::GetModuleFileName(NULL,pCallFileName,MAX_PATH);
ATL::CString strCall = pCallFileName;
strCall = L"调用EXE:" + strCall;
::GetModuleFileName(hModule,pDllFileName,MAX_PATH);
ATL::CString strTips = pDllFileName;
strTips = L"被调用DLL:"+strTips;
::MessageBox(NULL,strCall+L"\n"+strTips,L"MyDLL.dll",MB_OK);
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
调用DLL文件的程序调用DLL代码如下:
//静态库调用
#include "../LibTest/lib.h"
#pragma comment(lib,"../release/LibTest.lib")//指定与静态库一起链接 //dll 的静态调用
#pragma comment(lib,"../release/MyDLL.lib")
extern "C" _declspec(dllexport) int sub(int x,int y); //dll的动态调用
typedef int(*lpSubFun)(int,int);//宏定义函数指针类型 int _tmain(int argc, _TCHAR* argv[])
{
//静态库调用
//int rs = add(5,10);
//cout << rs <<endl; //dll的静态调用
//int rs2 = sub(100,33);
//cout << rs2 <<endl; //dll的动态调用: LoadLibrary-GetProcAddress-FreeLibrary”
//系统Api提供的三位一体“DLL加载-DLL函数地址获取-DLL释放”方式
HINSTANCE hDll;//DLL句柄
lpSubFun subFunc;//函数指针
hDll = LoadLibrary(L"../release/MyDLL.dll");
if(hDll!=NULL)
{
subFunc = (lpSubFun)GetProcAddress(hDll,"sub");
}
if(subFunc!=NULL)
{
int rs3 = sub(100,88);
//cout << rs3 << endl;
}
//cin.get();
return 0;
}
获取DLL的文件路径以及调用DLL的文件路径的更多相关文章
- fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。
为什么.h文件中不能定义全局变量? 原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到includ ...
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...
- LabVIEW如何方便地调用DLL文件
转自:http://bbs.elecfans.com/jishu_469502_1_1.html LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比 ...
- C++ exe调用dll文件
生成dll程序 extern "C"_declspec(dllexport) void maopao(int *p,int count);void maopao(int *p,in ...
- 【转】C#调用DLL
C#中如何调用动态链接库DLL(转) 每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认为:非托管代码主要是基 ...
- 在VC中创建并调用DLL
转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...
- QT 调用 DLL 方法(三种方法)
Qt调用DLL方法一:使用Win32 API 在显式链接下,应用程序必须进行函数 调用以在运行时显式加载 DLL.为显式链接到 DLL,应用程序必须:? 调用 LoadLibrary(或相似的函 数) ...
- 在Delphi中静态调用DLL
在Delphi中静态调用DLL top 调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. u ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
随机推荐
- Web API路由与动作(三)
本章包括三个小节 如果你输入了mvc的路由规则 这个可以粗略过一遍即可 内容说明有点繁琐 原文地址:http://www.asp.net/web-api/overview/web-api-rout ...
- Android UI:机智的远程动态更新策略
问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...
- SharedPreference.Editor的apply跟commit方法的異同
相同点: 1.二者都可提交preference的修改数据 2.二者都是原子操作 区别: 1.apply没有返回值而commit返回boolean表明修改是否提交成功 2.apply是将修改数据原子提交 ...
- 【HDOJ】2955 Robberies
01背包.将最大金额作为容量v.概率做乘法. #include <stdio.h> #include <string.h> #define mymax(a, b) (a> ...
- Unreachable catch block for IOException. This exception is never thrown from the try statement body
Unreachable catch block for IOException. This exception is never thrown from the try statement body ...
- bzoj2893
有起点终点的限制的路径覆盖首先tarjan缩点成DAG似乎不能按照二分匹配的做法做那么建立源汇拆点i,i',这两点之间连一条下界为1上界无穷的边,其它边都是下界为0,上界正无穷然后就是有源有汇的最小流 ...
- BZOJ2296: 【POJ Challenge】随机种子
2296: [POJ Challenge]随机种子 Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 114 Solv ...
- nodemon
使用nodemon让node自动重启 开发环境,修改代码服务器自动重启 npm install -g nodemon nodemon app.js
- Entity Framework系列文章导航
转自:http://www.cnblogs.com/xray2005/archive/2011/10/11/2206746.html Entity Framework4.0系列文章 需要说明的是,以下 ...
- (转载)1248 - Every derived table must have its own alias
(转载)http://hi.baidu.com/lylegend13/item/a79f17eb51f5dff7e0a5d43b 1. select count(distinct CName) fro ...