【原创翻译】链接DLL至可执行文件---翻译自MSDN
可执行文件.exe链接(或加载)DLL有以下两种形式:
隐式链接是指静态加载或在程序加载时动态链接。
通过隐式链接,在使用DLL时,可执行文件链接到一个由生成DLL的人提供的导入函数库(.lib 文件)。操作系统在使用这个函数库的执行文件被加载时,加载DLL。这个客户端可执行文件调用DLL的导出函数,就像函数包含在可执行文件中一样。
显式链接是指动态加载或在程序运行时动态链接。
通过显示链接,使用DLL的可执行文件必须使用函数调用显式加载(load)和卸载(unload)DLL,然后获取DLL的导出函数。客户端可执行文件必须通过一个函数指针调用导出函数。
一个可执行文件能对相同的DLL使用任意一个链接方法。此外,这些机制并不相互排斥,当一个可执行文件隐式链接一个DLL而另外一个可执行文件能显示链接它。
隐式链接使用方法
要隐式链接到DLL,可执行文件必须从DLL的提供程序获取以下内容:
- 包含导出的函数或C ++类的声明的头文件(.h文件)。类,函数和数据都应具有__declspec(dllimport),有关更多信息,请参阅dllexport,dllimport。
- 用于链接的导入库(.LIB文件)。 (链接器在DLL生成时创建导入库。)
- 真实存在的DLL(.dll文件)。
使用DLL的可执行文件必须包含每个源文件中包含导出函数(或C ++类)的头文件,该文件包含对导出函数的调用。从写代码角度来看,对导出函数的函数调用就像其他任何函数调用一样。
要构建调用的可执行文件,您必须链接到导入库。如果你正在使用外部生成文件,请指定导入库的文件名,其中列出了您要链接的其他对象(.obj)文件或库。
操作系统在加载调用的可执行文件时必须能够找到DLL文件。
显式链接
通过显示链接,应用程序必须在运行时使用一个函数调用以显式加载DLL。要明确链接到DLL,应用程序必须:
- 调用LoadLibrary(或类似的函数)来加载DLL并获取模块句柄。
- 调用GetProcAddress以获取应用程序想要调用的每个导出函数的函数指针。由于应用程序通过指针调用DLL的函数,因此编译器不会生成外部引用,所以不再需要链接到导入函数库了。
- 在完成DLL时调用FreeLibrary。
例如:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
... HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal; hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
Game over 结束。
参考链接:
Linking an Executable to a DLL
【原创翻译】链接DLL至可执行文件---翻译自MSDN的更多相关文章
- 百度翻译api 实现简易微信翻译小程序
介绍 口袋翻译 口袋翻译 微信小程序 翻译功能 含7类语言的相互翻译 包含最近10条的翻译历史回溯功能 微信搜索:简e翻译 功能展示 使用百度翻译api需要申请 appid 与 key 并在 ap ...
- CopyTranslator-复制即翻译的外文辅助阅读翻译解决方案
英语/English 复制即翻译的外文辅助阅读翻译解决方案 请尽快更新到,这是你没有体验过的全新版本,只需3分钟,你就会跟我一样,爱上这个软件. 如果您觉得软件对您有所帮助,不用follow,不用fo ...
- 动态链接 - dll和so文件区别与构成
动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库.大多数操作系统将解析外部引用(比如库)作为加载过程的一部分.在这些系统上,可执行文件包含一个叫做import directory的 ...
- 桌面每日一句--桌面翻译工具(有道翻译,微软翻译,Google翻译)
现在的翻译软件功能越来越多,也越来越臃肿,还不时弹广告,真的很烦恼. 鉴于这种情况,自己做了个翻译软件,能满足日常需求就好了.需要用的时候可以直接在桌面输入单词翻译,或者直接使用快捷键呼出翻译窗口.最 ...
- (未完成...)Python3网络爬虫(2):利用urllib.urlopen向有道翻译发送数据并获得翻译结果
环境: 火狐浏览器 pycharm2017.3.3 python3.5 1.url不仅可以是一个字符串,例如:http://www.baidu.com.url也可以是一个Request对象,这就需要我 ...
- 根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) [功能]根据条件返回相应值 [参数]c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null 注 ...
- Android使用有道翻译API实如今线翻译功能
在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API. 使用有道翻译API.首先要申请一个key,申请地址为:path=data-mode">有道翻译API申请地址 ...
- 1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o 4.链接,生成可执行文件: linux笔记
1 动态查看日志 tail -f filename tail -1000f filename 2 解压当前目录内容为xxx.zip zip -r xxx.zip ./* 3 查看内存使用情况 fre ...
- oracle函数 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
[功能]根据条件返回相应值 [参数]c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null 注:值1……n 不能为条件表达式,这种情况只能用case when then end解 ...
随机推荐
- 使用FPDF输出中文
① 下载FPDF相关资料=>https://github.com/DCgithub21/cd_FPDF ② 查看目录文件 注:ttf2pt1.zip为字体转换程序 ③ 运行example.ph ...
- 【转】图像金字塔PyrDown,PyrUP
原文链接:http://blog.csdn.net/davebobo/article/details/51885043 [图像金字塔] 图像金字塔这个词,我们经常在很多地方可以看到.它是图像多尺度表达 ...
- OpenCV视频的读写
实验室的项目是处理视频,所以就从视频的读取和写入开始吧! 常用的接口有C++和Python,Python肯定要简洁许多,不过因为项目需要,还是用C++了(PS:其实是我被Python的速度惊到了... ...
- View Controller Programming Guide for iOS---(八)---Using View Controllers in the Responder Chain
Using View Controllers in the Responder Chain 响应链中使用视图控制器 View controllers are descendants of the UI ...
- Docker容器日志管理最佳实践
目录 一 .Docker 引擎日志 二.容器日志 2.1.常用查看日志命令--docker logs 2.2 .Docker 日志 驱动 三. 生产环境中该如何储存容器中的日志 一.当是完全是标准输出 ...
- E20170429-hm
fold n/v 折叠 ribbon n 色带 hover n. 盘旋; 徘徊; vi犹豫 Roll over 打滚; 折:翻滚 pinch ピンチ 捏,掐; finger フィンガー sc ...
- (水题)洛谷 - P1583 - 魔法照片
https://www.luogu.org/problemnew/show/P1583 设计一个strcut cmp用来比较,就可以了. #include<bits/stdc++.h> u ...
- Tenka1 Programmer Beginner Contest D - IntegerotS(位运算)
传送门 题意 给出N,K,给出N对数a[i],b[i],选择一些数使得or和小于k且\(max\sum b[i]\) 分析 枚举k的每一个1位,将其删去并让低位全为1,对于每一个这样的数c,如果a[i ...
- jzoj5980. 【WC2019模拟12.27】字符串游戏
首先发现双方可以有一个默契,不管谁刻意,都可以把串变为诸如\(...101010101...\)的形式 所以先手要赢的话就是要在上面的基础之上加一个字符使其变为要求的子串 那么就是要求的子串中相邻两个 ...
- Luogu P3393 逃离僵尸岛【最短路】By cellur925
题目传送门 题目大意:(其实概括出来也就基本做完了hh)在一张有$n$个点,$m$条边的无向图上,有$k$个点是不能经过的,而与之距离不超过$s$的点,到他们会花费$Q$元,到其他点会花费$p$元,求 ...