一、简介
我是一个认真的人,要么不写,要么我就把步骤、截图、代码,一 一 附上,方便大家参考学习。
1、为什么要生成DLL和lib?
就是为了给VS工程调用(比如C#调用、C++工程)。
2、C#为什么要调用DLL和lib?
C++写的程序,只能通过DLL的形式给C#调用。
3、如果我能在C++就能完成工作,需要用C#来写程序吗?
不需要,因为C++效率要比C#效率高。但是安全性比不上C#。原因是C++非托管代码,C#是托管代码。
4、什么是托管代码与非托管代码?执行效率对比
不想多说,这篇文章完成能解释托管代码与非托管代码的执行效率对比。在同样的配置环境下,C++效率要比C#效率高出十几倍。十几倍啊,吓死人了。
http://www.cnblogs.com/loverswordsman/articles/1367131.html
好了,不多说了,下面看看如何封装吧
二、vs2015封装c++成dll和lib
主要参考https://blog.youkuaiyun.com/mango_haoming/article/details/79996073
1、建立名称为creatDLL的工程
该工程存放到我目录C:\Users\lanmage2\Desktop\C++test\test1\
2、往工程添加dll.h文件和对应的dll.cpp
其中,creatDLL.cpp和creatDLL.h文件在我建立工程的时候就有了。保留这两个文件,不作任何修改。
3、往dll.cpp和dll.h添加头文件
注意啊,一般先写dll.h,才写dll.cpp。因为头文件是作了一个概括,这个概括包括了定义的函数,而函数的具体实现,就在dll.cpp中完成。
dll.h:
#ifndef DLL_H
#define DLL_H
extern __declspec(dllexport)int add(int x, int y);
extern __declspec(dllexport)int sub(int x, int y);
#endif
dll.cpp:
#include"stdafx.h"
#include"dll.h"
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
4、最后一步,生成解决方案
5、Debug下,生成了两个文件,即creatDLL.dll和creatDLL.lib
这两个文件,是整个工程编译下,生成的文件。以便给C#工程调用或其他工程调用。
注意啊,creatDLL.dll和creatDLL.lib是在整个工程下生成的,因为工程的名字就叫做creatDLL。它们(creatDLL.dll和creatDLL.lib)与文件creatDLL.h、文件creatDLL.cpp,没有半毛钱关系。
三、creatDLL.dll文件、creatDLL.lib文件、dll.h文件,给另一个工程使用
好了,刚才建立的三个文件creatDLL.dll/creatDLL.lib/dll.h,现在要使用起来。
1、建立一个空的C++控制台工程:
其实这个test2工程,就只有一个main.cpp文件。
2、main.cpp代码
#include<iostream>
#include "dll.h"
//#include "creatDll.h"
using namespace std;
int main(int argc, char** argv)
{
/*CcreatDll c1;
cout << ncreatDll << endl;*/
cout << add(1, 2) << endl
<< sub(6, 3) << endl;
getchar();
return 0;
}
3、输出效果
4、OK,现在来看看配置吧,只有配置成功后,test2工程才能使用
主要参看https://blog.youkuaiyun.com/yimiyangguang185/article/details/52585332
4.1、配置头文件存放目录
把test1的dll.h拷贝到test2/include中,test2的include文件是自己建立的。
项目——属性:
编辑进去看看
4.2、配置lib文件
建立lib文件夹,拷贝test1的creatDLL.lib到其中。
工程---属性---配置属性---链接器---常规---附加库目录,其目的是添加lib目录
工程---属性---配置属性---链接器---输入---附加依赖项,其目的是添加lib文件
4.3、配置动态DLL
将creatDLL.dll拷贝到tests的debug下,就可以了
四、总结
1、以上关于.dll/.lib/.h文件的生成,配置已经全部完成。
2、主要lib配置,不但要配置目录,而且还要配置***.lib文件名。
3、大部分的博客只有生成,没有配置。并且大部分配置没有截图,这我最想吐槽的一点。