一、将 .cpp 文件编译成 .dll 文件

方法一:使用  __declspec(dllexport)   创建 dll 文件

1、创建文件夹 CreatDll

将cpp类导入python cpp转dll_动态链接库

 

将cpp类导入python cpp转dll_应用程序_02

2、为该项目添加头文件 CreatDll.h

 

将cpp类导入python cpp转dll_将cpp类导入python_03

将cpp类导入python cpp转dll_将cpp类导入python_04

CreatDll.h 中代码如下:

#pragma once

#ifdef CREATDLL_EXPORTS
#define CREATDLL_API __declspec(dllexport)
#else
#define CREATDLL_API __declspec(dllexport)
#endif // CREATDLL_EXPORTS

extern "C" CREATDLL_API int TheAdd(int a, int b);

/*
也可以直接写成如下的形式:
extern "C" __declspec(dllexport) int TheAdd(int a, int b);
#define CREATDLL_API __declspec(dllexport) 的作用是将 __declspec(dllexport)
用标识符 CREATDLL_API 来进行表示
*/

3、为该项目添加源文件 CreatDll.cpp

 

将cpp类导入python cpp转dll_动态链接库_05

 CreatDll.cpp 代码如下:

#include<iostream>
#include "CreatDll.h"

int TheAdd(int a, int b){
    return a + b;
}

4、将该文件编译成 .dll 文件

  

将cpp类导入python cpp转dll_应用程序_06

编译成功之后结果如下:会产生 所需要的 .dll 文件和 .lib 文件

将cpp类导入python cpp转dll_将cpp类导入python_07

*********************************************************************************************************************

方法二:使用模块(.def)的方式来进行生成 .dll 文件

1、创建新的项目:CreateDll02

 

将cpp类导入python cpp转dll_应用程序_08

 

将cpp类导入python cpp转dll_API_09

2、打开 CreateDll02.cpp 源文件,输入代码

  

将cpp类导入python cpp转dll_动态链接库_10

// CreateDll02.cpp : 定义 DLL 应用程序的导出函数。

#include "stdafx.h"

int TheAdd(int a, int b) {
	return a + b*100;
}
int TheSub(int c, int d) {
	return c - d;
}

3、给该工程添加一个后缀名为 .def

 

将cpp类导入python cpp转dll_将cpp类导入python_11

将cpp类导入python cpp转dll_将cpp类导入python_12

LIBRARY CreateDll02

EXPORTS
TheAdd  @1
TheSub  @2

【注意】:

  • 其中LIBRARY语句用于指定动态链接库的名称,该名称与生成的 dll 文件名称一定要匹配。
  • EXPORTS语句用于表明dll将要导出的函数,以及为这些导出函数指定的符号名。 可以在.def文件中的导出函数名后加 @n,如TheAdd   @1,TheSub  @2,表示要导出的函数顺序号。然后在C#中调用这些dll文件中的函数时,可以让 EntryPoint 属性值用该序号来代替相应的函数名。如:[DllImport("CreateDll01.dll" , EntryPoint ="#2" , CallingConvention = CallingConvention.Cdecl)] 中用序号 #2  来代替 TheSub 函数名,其原来的属性值应为:EntryPoint ="TheSub"
  • 该DLL编译成功后,打开工程中的Debug目录,同样也会看到 CreateDLL02.dll 文件。

二、C++程序调用 .dll 文件

1、新建控制台应用程序的项目,来调用以上所生成的 .dll 文件

将cpp类导入python cpp转dll_API_13

将cpp类导入python cpp转dll_将cpp类导入python_14

2、将已经生成的 .dll 文件和 .lib 文件复制到控制台应用程序的项目文件夹中。

 

将cpp类导入python cpp转dll_API_15

3、再将 CreatDll.h 文件也复制到控制台应用程序的项目文件夹中。

 

将cpp类导入python cpp转dll_动态链接库_16

4、将复制过来的 .lib 文件添加到资源文件中

 

将cpp类导入python cpp转dll_应用程序_17

将cpp类导入python cpp转dll_将cpp类导入python_18

将cpp类导入python cpp转dll_动态链接库_19

5、为控制台应用程序添加源文件  CallDll.cpp ,代码如下

#include<iostream>
#include "CreatDll.h"

using namespace std;
int main()
{
	int x, y;
	cout << "请输入 x = ";
	cin >> x;
	cout << "请输入 y =";
	cin >> y;
	return TheAdd(x, y);
}

6、运行结果如下:

 

将cpp类导入python cpp转dll_将cpp类导入python_20

 


参考资料:

[1]  VS2017动态链接库(.dll)的生成与使用

[2]  C++编程笔记:dll的生成与使用

[3]  演练:创建和使用自己的动态链接库 (C++)