linux下qt调用dll文件路径,获取DLL的文件路径以及调用DLL的文件路径
如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize)函数来获取,根据hModule参数来辨别是DLL本身还是DLL的调用者。当hModule 为NULL时候 获取到路径为调用者,当hModule为main入口的BOOL APIENTRY DllMain
如何在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 <
//dll的静态调用
//int rs2 = sub(100,33);
//cout << rs2 <
//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;
}
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 ...
随机推荐
我的MYSQL学习心得(十四) 备份和恢复
我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
New Career
Today I received the official confirmation letter with very good grade for the probation, it means t ...
Android 6.0 运行时权限处理
在运行时请求权限 从Android 6.0(API级别23)开始,用户权限授予应用程序在应用程序运行时,当他们安装程序.这种方法简化了应用程序的安装过程,因为用户不需要安装或更新应用程序时授予权限.这 ...
jquery条件选择多个元素(与、或者)
或者:选择器用逗号分隔,这也对应了jquery对象转dom为$(obj)[0]的写法 如:$('div[name="a"],div[name="b"]') :h ...
iOS 钥匙串 指纹识别 get和Post请求的区别
01-钥匙串 1. 通过系统提供的钥匙串功能可以在本地保存密码,系统使用AES的方式对密码加密 a. 查看Safari中保存的密码 2. 使用第三方框架SSKeychain把密码保存到钥匙串和获取钥匙 ...
UVa11082 Matrix Decompressing(最小费用最大流)
题目大概有一个n*m的矩阵,已知各行所有数的和的前缀和和各列所有数的和的前缀和,且矩阵各个数都在1到20的范围内,求该矩阵的一个可能的情况. POJ2396的弱化版本吧..建图的关键在于: 把行.列看 ...
Java实现多线程邮件发送
利用java多线程技术配合线程池实现多任务邮件发送. 1.基本邮件发送MailSender package hk.buttonwood.ops.email; import java.io.File; ...
java_String和StringBuffer区别分析
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供 ...
CentOS自带mysql配置(密码更改、端口开放访问、添加进系统启动项)
前些天虚拟机安装好了CentOS6.1,但是自己想远程连接自带的mysql发现不知道如何改密码,于是谷歌一下,把结果记录下来,方便后期自己使用: 方法一: # /etc/init.d/mysql st ...
awk命令基本使用方法
awk命令 基本用法 awk '{print $1, $4}' netstat.txt 单引号中大括号的部分就是awk语句 $1至$n表示第几列,$0表示整行 格式化输出的方法 $ awk '{pri ...
更多推荐


所有评论(0)