工具VS2015为例

一、把c++的exe工程编译为动态库dll静态库lib

1.新建项目,命名为MyProject,如图,

编译 Android 动态库 编译成动态库_API


然后点击确定,再点击下一步,如图

编译 Android 动态库 编译成动态库_dll_02

然后点击完成。2.添加需要的包含目录,库目录,附加依赖项,如图 我添加的是opencv库,如果没有什么依赖,那就不添加。

编译 Android 动态库 编译成动态库_c++_03

编译 Android 动态库 编译成动态库_动态库_04

编译 Android 动态库 编译成动态库_dll_05


3.修改模式 ,例如我的是release 64

编译 Android 动态库 编译成动态库_动态库_06

4.编辑MyProject.h,如图的例子

编译 Android 动态库 编译成动态库_c++_07


(1)类。把你原来exe工程所有的class都按照图中例子形式复制过来,class后面不要忘了写上MYPROJECT_API,这是该class对外开放的接口宏定义(不加上的话,该class就不对外开放),class的成员函数只需要写出声明即可(因为函数的定义需要在MyProject.cpp实现);

(2)变量。把你原来exe工程的所需的变量按照图中形式复制过来,同样不要忘记MYPROJECT_API,这是该变量对外开放的接口宏定义。

(3)函数。把你原来exe工程的所需的函数按照图中形式复制过来,同样不要忘记MYPROJECT_API,这是该函数对外开放的接口宏定义。

另外要注意MYPROJECT_API 添加的位置。在class和在函数中位置稍有不同。
以上就完成了要开放哪些接口的声明,具体实现放在MyProject.cpp中。

5.编辑MyProject.cpp,如图的例子

编译 Android 动态库 编译成动态库_dll_08

(1).类的成员函数。看右边的第三个箭头,这是在MyProject.h声明的类CMyProject的成员函数具体定义。如果你有其他类的成员函数定义,同样需要复制过来。这里没有添加MYPROJECT_API
(2).函数。看右边的第二个箭头,这是这是在MyProject.h声明的函数fnMyProject()的具体实现,如果你有其他的函数实现,同样需要复制过来。这里需要注意添加MYPROJECT_API
(3).变量。看右边的第一个箭头,这是这是在MyProject.h声明的变量nMyProject的具体实现,如果你有其他的变量实现,同样需要复制过来。这里需要注意添加MYPROJECT_API

以上就完成了对MyProject.h中声明的具体实现。

6.点击生成解决方案,生成.dll动态库和.lib静态库

编译 Android 动态库 编译成动态库_编译 Android 动态库_09


二、调用dll

1.新建项目

编译 Android 动态库 编译成动态库_动态库_10


3.修改模式 ,例如我的是release 64

4.把步骤一的MyProject.h、MyProject.lib复制到工程

5.按照步骤一添加需要的包含目录,库目录,附加依赖项,不同的地方就是附加依赖项需要多加上我们生成的MyProject.lib

6.新建源文件命名为例如Mymain.cpp,并#include MyProject.h,这样你就可以调用在MyProject.h声明的类或者函数,但是看不到类和函数的具体实现。

7.写好你的main函数之后点击生成解决方案,会生成.exe文件,但不能运行,会提示找不到MyProject.dll文件,需要把步骤一生成的MyProject.dll文件复制到与.exe同目录即可。

以上就完成了,把c++的exe工程编译为动态库dll静态库lib,并实现调用。有问题可以留言交流 _