动态链接库之 隐式调用——vs手把手演示

来源:互联网 发布:霸王的大陆java版本 编辑:程序博客网 时间:2024/05/18 02:14

VS版本: 2013

首先要生成DLL吧。在vs中新建项目,选择win32项目,下一步,勾选 DLL, 导出符号:


完成,就创建了该有的文件。主要看到2个文件,一个是dll的头文件,一个是dll的cpp文件:


看到我们的头文件中,自带了一个函数:DLL_STATIC_API int fndll_static(void);

// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL_STATIC_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将// DLL_STATIC_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的// 符号视为是被导出的。#ifdef DLL_STATIC_EXPORTS#define DLL_STATIC_API __declspec(dllexport)#else#define DLL_STATIC_API __declspec(dllimport)#endif// 此类是从 dll_static.dll 导出的class DLL_STATIC_API Cdll_static {public:Cdll_static(void);// TODO:  在此添加您的方法。};extern DLL_STATIC_API int ndll_static;DLL_STATIC_API int fndll_static(void);
cpp文件中的定义:

// dll_static.cpp : 定义 DLL 应用程序的导出函数。//#include "stdafx.h"#include "dll_static.h"// 这是导出变量的一个示例DLL_STATIC_API int ndll_static=0;// 这是导出函数的一个示例。DLL_STATIC_API int fndll_static(void){return 42;}// 这是已导出类的构造函数。// 有关类定义的信息,请参阅 dll_static.hCdll_static::Cdll_static(){return;}
点击生成->生成DLL,生成之后就有:

现在就导出了dll, lib 文件啦。

现在我们再开一个cpp项目去尝试调用导出的dll,比如说,main.cpp简单的代码如下:

#include<stdio.h>#include<iostream>#include<Windows.h>#include "dll_static.h"#pragma comment(lib, "dll_static.lib")//这个是一定需要lib文件的!using namespace std;int main(){cout << "hello world!\n" << endl;cout << fndll_static() << endl;system("pause");return 0;}

简单的隐式调用的代码就是这样的,需要头文件,lib文件,dll文件——还要注意把这几个文件放入相应的路径  或者  使用绝对路径去引用他们。

最后的结果就是,我们main.cpp文件可以调用DLL中 fndll_static 函数啦。——可以看出,隐式调用是比较麻烦滴。