【原创翻译】链接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解 ...
 
随机推荐
- Table View Programming Guide for iOS---(四)---Navigating a Data Hierarchy with Table Views
			
Navigating a Data Hierarchy with Table Views 导航数据表视图层次 A common use of table views—and one to which ...
 - logging日志类
			
#! /usr/bin/env python #coding=utf-8 import logging,os class Logger: def __init__(self, path,clevel ...
 - C++笔试题(三)
			
普天是南京一家通信公司,全称为:南京普天通信股份有限公司,公司网址为:http://www.postel.com.cn 网上流传一套普天C++笔试题,我将我做的答案公布与此,仅供参考. 1.实现双向链 ...
 - HDU6031:Innumerable Ancestors(二分+倍增数组)
			
传送门 题意 n个点的图,有n-1条无向边,m个询问,每次询问 给出两个集合a和b,找到a的一个元素x,b的一个元素y,使得x和y的lca深度最大 分析 这道题如果直接暴力做,复杂度为O(mk1k2* ...
 - python __builtins__ credits类 (15)
			
15.'credits', 信用 class _Printer(builtins.object) | interactive prompt objects for printing the licen ...
 - postman接口测试系列:环境配置
			
最近忙着项目接口测试,经过不同工具的对比,发现postman使用起来挺顺手的,所以马上决定使用这个工具进行接口测试工作.刚开始的时候,了解了下接口测试的相关信息,直接着手编写接口测试的测试用例信息 ...
 - bzoj 5018 [Snoi2017]英雄联盟
			
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=5018 题解 简单的dp 令dp[i][j]表示前i个英雄 总花费为j 最大能够得到的展示种数 ...
 - Wolfycz的娱乐赛题解
			
现在不会放题解的!比赛完了我会把题解放上来的 祝大家玩的愉快~ 等会,cnblogs不会显示更新时间?我禁赛我自己 UPD:2018.12.15 欢迎大家爆踩标程- painting 我们考虑转化题意 ...
 - Win10 Hyper-v 中安装 CentOS 搭建开发环境
			
Windows 环境 操作系统:Windows 10 开发环境:VS2005(需启动.NET Framework 3.5 ,才能正常安装使用) Linux 环境 发行版:CentOS 7_x64 安 ...
 - windows密码长度最小值改不了
			
控制台输入gpedit.msc或者在“开始→控制面板→管理工具→本地安全策略→账户策略→密码策略→密码长度最小值”中修改不了,是灰色的,不让修改 用命令行可以修改开始-->运行-->输入& ...