第19讲——动态链接库

1,建立一个win32的dll项目,编译。在vs的安装目录下的E:\visual stdio 2015\VC\bin执行vcvars32.bat,使得dumpbin.exe可用。使用dumpbin -exports ConsoleApplication1.dll可以查看动态链接库的导出函数。如果要导出函数,则在动态链接库的函数名前要加_declspec(dllexport),如_declspec(dllexport) int add(int a, int b)

2,在要调用动态链接库的工程里 先声明 extern int add(int a, int b);然后再使用,并且在工程中要加入动态链接库生成的ConsoleApplication1.dll 和ConsoleApplication1.lib。 _declspec(dllexport)标识符声明的函数效率更高,相对于用extern

3,可以用dependency walker查看动态链接库中导出的函数

4,如果动态链接库项目中源程序自己要使用动态链接库函数,则在动态链接库头文件中使用预编译宏

#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllexport)
#endif // DLL1_API

动态链接库源文件中使用

#define DLL1_API _declspec(dllexport)
#include "dll1.h"

5,自己搜MSDN时找到的一种在各种字符串类型之间进行转换的方法  https://msdn.microsoft.com/zh-cn/library/ms235631(v=VS.100).aspx

如char 和wchar_t之间的转换

char *orig = "Hello, World!";
size_t newsize = strlen(orig) + 1;
wchar_t * wcstring = new wchar_t[newsize];size_t convertedChars = 0;mbstowcs_s(&convertedChars, wcstring, newsize, orig, _TRUNCATE);

6,在MFC中可以调用GetForegroundWindow(),返回指向前台窗口(使用用户当前)的窗口。

7,为了防止在不同的编译器中以及C++编写的动态链接库能被用c写的程序调用,则在导出函数前要加extern “C” 如#define DLL1_API extern "C" _declspec(dllexport)

8,如果导出函数的调用约定使用了标准调用约定_stdcall 可以通过模块定义文件的方式来解决名字改编的问题。模块定义文件的后缀名是.def,模块定义文件可以按如下所示写:

LIBRARY DLL2

EXPORTS
add
subtract

9,对动态链接库的使用可以有隐式连接(通过头文件和加入链接库.lib),和动态加载(LoadLibrary函数,GetProcAddress函数获取导出函数的地址)。如:

HINSTANCE hinst;
hinst = LoadLibrary(_T("DLL2.dll"));
typedef int(*addProc)(int a, int b);
addProc pdd = (addProc)GetProcAddress(hinst, "add");

10,MAKEINTRESOURCE()宏,可以将动态链接库序号转化为字符串

11, DLLMain动态链接库入口函数

12,在不需要动态链接库的时候,可以用FreeLibrary();

				
时间: 2024-11-06 08:22:39

第19讲——动态链接库的相关文章

第19讲 不带参数功能FC的编程与应用

 

第19讲++触发器

为xs_kc表创建一个名为t1的insert触发器,当向xs_kc表进行插入操作时激发该触发器,并给出提示信息"有新成绩信息插入到xs_kc表中!". create trigger t1 on xs_kc for insert as print '有新成绩信息插入到xs_kc表中! ' go insert xs_kc values( '2012130101', '111', 87, null ) 要在xscj库的xsqk表中插入下面所示的2条信息,如果在该表上未创建触发器,则可成功插入

第19讲 | 上手搭建一条自己的智能合约

上一篇我们聊到了区块链智能合约,我主要介绍了智能合约的概念,但是并没有给你提供智能合约的实际运行案例,那么今天,我们就自己动手写一个智能合约,并且介绍一下智能合约标准模板,供你参考学习, 并搭建起自己的智能合约. 本篇将以以太坊作为基础知识进行讲解,本篇面向没有任何智能合约基础的人群,所以配备了较多的插图和操作命令,如果你正在收听音频,可以点击文稿查看,希望读完这篇文章可以帮助你快速入门智能合约. 搭建一条智能合约 在实际操作智能合约之前,我们首先回顾一下以太坊,以太坊又称以太坊钱包.以太坊钱包

Hadoop深入浅出实战经典视频教程(共22讲)

该视频教程共22讲,由王家林老师主讲. --------------------------------------------------------- 第01讲:为什么会有第一代大数据技术Hadoop和第二代大数据技术Spark? 第02讲:10分钟从技术角度理解Hadoop 第03讲:Hadoop集群安装解析 第04讲:Hadoop集群构建硬件选择.集群规模.网络拓扑.机架感知等 第05讲:Hadoop集群之安装Java.创建Hadoop用户.配置SSH等实战 第06讲:Hadoop集群之

PHP100教程资料 1~45讲

链接:http://pan.baidu.com/s/1hr7r5WC 密码:xjtp? 目录 第一讲:PHP环境搭配和代码调试 1 第二讲:PHP基本语法和数据类型 3 (第三讲) 常用PHP运算类型介绍与应用 5 1.算术运算 5 2.赋值运算 5 3.比较运算 5 4.逻辑运算 5 5.递增递减运算 5 (第四讲) PHP条件语句的介绍与应用 7 1.if 条件语句 7 2.switch 条件语句 7 (第五讲) PHP循环语句的介绍与应用 8 1.break n 循环控制语句 8 2.do

《视觉机器学习20讲》——谢剑斌

第19讲 遗传算法(Genetic Algorithm) 第20讲 蚁群算法(AntColony Algorithm) 实验仿真源代码下载 www.kedachang.com或http://pan.baidu.com/s/1c051viS 除了书本自带的仿真demo,另外还一些实例 js 遗传算法的JS实现 https://github.com/bz51/GeneticAlgorithm 蚁群算法的JS实现 https://github.com/bz51/AntColonyAlgorithm A

python页面解析_beautifulsoup试玩

最近玩爬虫,先把python解析器 beautifulsoup 练练 这个 tainiu.html 是从百度网盘里拷贝一段html from bs4 importBeautifulSoup with open('tainiu.html','r',encoding ='UTF-8')as f: html = f.read() # 这里的编码默认不行 一定要写上 否则报错  # 应该跟具体情况有关, python 教学视频里 就不写encoding 没错误 实际用 就出问题 soup =Beauti

小布老师全部视频

http://www.boobooke.com/bbs/thread-7630-1-1.html 小布老师全部视频(更新时间:2011-08-10更新内容:Oracle 11g PL/SQL 23-27讲) 时间, 老师, Fundamentals, 视频 本帖最后由 river7000 于 2012-1-31 09:16 编辑 播布客Oracle交流群"197276682"群(上限500人)已满员,209931123群刚建立,须要增加的群友请加,我会缴请小布老师增加新建的群,欢迎小布

00 Cadence学习总目录

这个系列是我学习于博士CADENCE视频教程60讲时,一边学一边记的笔记.使用的CADENCE16.6. 01-03课 了解软件 创建工程 创建元件库 分裂元件的制作方法 04课 正确使用heterogeneous类型的元件 05讲 加入元件库,放置元件 06讲 同一个页面内建立电气互连 07讲 总线的使用方法 08讲 browse命令的使用技巧 10讲 元件的替换与更新 11讲 对原理图中对象的基本操作 13讲 如何添加footprint属性 14讲 生成网表 15讲 后处理 16讲 高速电路