DLL获取当前文件目录和DLL调试方法
来源:互联网 发布:星光大道网络投票 编辑:程序博客网 时间:2024/06/04 18:56
DLL获取当前文件目录和DLL调试方法
1.DLL获取文件目录
GetModuleFileName可以获得指定模块的路径,如果传入NULL,则输出所在进程exe的路径,因此在DLL中要想获得当前DLL的路径,必须获得DLL的实例。这样我们才能得到当前DLL的路径,总结可分为如下四种方法,这些方法的不同只在于获得DLL的模块实例句柄方法不同:
- //编译器伪变量
- void __stdcall GetCurDLLDir()
- {
- TCHAR szDir[MAX_PATH];
- HMODULE hModule = reinterpret_cast<HMODULE>(&__ImageBase);
- GetModuleFileName(hModule, szDir, MAX_PATH);
- PathRemoveFileSpec(szDir);
- MessageBox(NULL, szDir, TEXT(”GetCurDLLDir-DLL路径名”), MB_OK);
- }
- //GetModuleHandleEx获得模块句柄
- void __stdcall GetCurDLLDir2()
- {
- TCHAR szDir[MAX_PATH];
- HMODULE hModule;
- GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPTSTR)GetCurDLLDir2, &hModule);
- if(NULL != hModule)
- {
- GetModuleFileName(hModule, szDir, MAX_PATH);
- PathRemoveFileSpec(szDir);
- }
- MessageBox(NULL, szDir, TEXT(”GetCurDLLDir2-DLL路径名”), MB_OK);
- }
- //ATL
- void __stdcall AtlGetCurDLLDir()
- {
- TCHAR szDir[MAX_PATH];
- HMODULE hModule = _Module.GetModuleInstance();
- GetModuleFileName(hModule, szDir, MAX_PATH);
- PathRemoveFileSpec(szDir);
- MessageBox(NULL, szDir, TEXT(”AtlGetCurDLLDir-DLL路径名”), MB_OK);
- }
- //全局HMODULE
- void __stdcall GlobalGetCurDLLDir()
- {
- TCHAR szDir[MAX_PATH];
- HMODULE hModule = g_hModule;
- GetModuleFileName(hModule, szDir, MAX_PATH);
- PathRemoveFileSpec(szDir);
- MessageBox(NULL, szDir, TEXT(”GlobalGetCurDLLDir-DLL路径名”), MB_OK);
- }
//编译器伪变量void __stdcall GetCurDLLDir(){ TCHAR szDir[MAX_PATH]; HMODULE hModule = reinterpret_cast<HMODULE>(&__ImageBase); GetModuleFileName(hModule, szDir, MAX_PATH); PathRemoveFileSpec(szDir); MessageBox(NULL, szDir, TEXT("GetCurDLLDir-DLL路径名"), MB_OK);}//GetModuleHandleEx获得模块句柄void __stdcall GetCurDLLDir2(){ TCHAR szDir[MAX_PATH]; HMODULE hModule; GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPTSTR)GetCurDLLDir2, &hModule); if(NULL != hModule) { GetModuleFileName(hModule, szDir, MAX_PATH); PathRemoveFileSpec(szDir); } MessageBox(NULL, szDir, TEXT("GetCurDLLDir2-DLL路径名"), MB_OK);}//ATLvoid __stdcall AtlGetCurDLLDir(){ TCHAR szDir[MAX_PATH]; HMODULE hModule = _Module.GetModuleInstance(); GetModuleFileName(hModule, szDir, MAX_PATH); PathRemoveFileSpec(szDir); MessageBox(NULL, szDir, TEXT("AtlGetCurDLLDir-DLL路径名"), MB_OK);}//全局HMODULEvoid __stdcall GlobalGetCurDLLDir(){ TCHAR szDir[MAX_PATH]; HMODULE hModule = g_hModule; GetModuleFileName(hModule, szDir, MAX_PATH); PathRemoveFileSpec(szDir); MessageBox(NULL, szDir, TEXT("GlobalGetCurDLLDir-DLL路径名"), MB_OK);}
2.调试的方法
调试DLL导出函数,可以借助于微软的rundll32.exe程序 传入待调试的dll模块[空格]函数名即可
本工程配置如下:
演示文件下载链接 访问密码 7ae5
原创,转载请注明来自http://blog.csdn.net/wenzhou1219
阅读全文
0 0
- DLL获取当前文件目录和DLL调试方法
- DLL获取当前文件目录和DLL调试方法
- .net 获取当前DLL所在目录
- bat批处理获取当前bat文件目录中所有的ocx dll文件路径
- 获取文件当前目录方法
- 获取dll所在目录
- 获取DLL的目录!
- C# 获取资源文件中的DLL,调用DLL中的方法
- 关于dll文件目录
- 关于PDB文件和dll调试
- 控件和DLL时的调试方法
- Delphi调试dll文件
- 调试文件:*. dll, *.pdb
- vs2010调试dll文件
- 调试Dll的方法
- dll调试方法
- VC调试DLL方法
- DLL调试方法
- Android hdpi ldpi mdpi xhdpi xxhdpi屏幕适配详解
- ORA-04098: trigger 'SYS.GGS_DDL_TRIGGER_BEFORE' is invalid and failed re-validation
- 百度地图 省市区县 信息展示
- win10下多图详解Android Studio集成第三方模拟器 -- Genymotion
- 面向对象第二个特征----继承III(子父类中的构造函数)
- DLL获取当前文件目录和DLL调试方法
- accept 文件描述符用尽处理
- 深入理解 JavaScript 数组的特性与最佳实践
- HDU
- 通用的搜索引擎优化实现任务
- PumpLinx_3.0.2.rar
- 李泽湘:工程意识,百亿独角兽的核心竞争力 | 笔记
- 模板方法模式
- Qt自动添加资源文件