【原创翻译】链接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解 ...
随机推荐
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时24&&25
课时24 深度学习开源库使用介绍(上) Caffe 被用于重新实现AlexNet,然后用AlexNet的特征来解决其他事情 用C++书写的,可以去GitHub上面读取源代码 主要四个类: Blob可以 ...
- Android Studio提示忽略大小写
Android Studio的自动提示功能非常之强大,但是,如果你要输入“String”,你输入“string”,这个是不会提示的,也就是大小写敏感的,不爽是吗? 选择大小写不敏感就ok了!这样你想怎 ...
- python __builtins__ staticmethod类 (64)
64.'staticmethod', 返回静态方法 class staticmethod(object) | staticmethod(function) -> method | | Conve ...
- 洛谷 P2519 [HAOI2011]problem a
传送门 考虑转化为求最多说真话的人数 设$f(i)$表示排名前$i$的人中最多说真话的人的数量,考虑转移,如果由$j$转移而来,可以设$[j,i]$之间的人全都分数相等,那么式子就是$f[i]=f[j ...
- 浅谈Floyd的三种用法 By cellur925
Floyd大家可能第一时间想到的是他求多源最短路的n³算法.其实它还有另外两种算法的嘛qwq.写一发总结好了qwq. 一.多源最短路 放段代码跑,注意枚举顺序,用邻接矩阵存图.本质是一种动规. 复杂度 ...
- 关于asp.net网址出现乱码问题的解决方法
背景: asp.net项目,C#,VS2010,.netframework 4.0 创建之初,没有任何问题,随着项目文件的增多,不免很多问题会出现, 最近就莫名其妙的发现我的项目网址多了一段乱码,很是 ...
- hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...
- 跟我一起玩Win32开发(11):使用控件——先来耍一下按钮
用户通过控件与应用程序交互,在吹牛之前,先介绍一个工具,这是官方的工具,使用它,你可以预览常用控件的外观.样式,以及对控进行操作时接收和发送哪些消息.下载地址如下: http://www.micros ...
- Query on a tree again! SPOJ - QTREE3
https://vjudge.net/problem/SPOJ-QTREE3 https://www.luogu.org/problemnew/show/P4116 一个log(LCT)比两个log( ...
- ACM_LRU页面置换算法
LRU页面置换算法 Time Limit: 2000/1000ms (Java/Others) Problem Description: sss操作系统没听课, 这周的操作系统作业完全不会, 你能帮他 ...