C++中dll文件的生成和调用

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

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

1、创建文件夹 CreatDll

 

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

 

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

 

 CreatDll.cpp 代码如下:

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

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

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

  

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

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

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

1、创建新的项目:CreateDll02

 

 

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

  

// 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 文件,并在该文件中插入以下代码

 

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 文件

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

 

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

 

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

 

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、运行结果如下:

 

 


参考资料:

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

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

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

 

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值