记录c++制作dll并调用

记录c++制作dll并调用

  1. 打开vs(我用的是vs2017),然后点击文件—>文件—>新建—>项目,选择windows桌面向导。并输入你想建立的vs工程名字和路径(就命名为addfun)。然后点击下一步,应用程序类型选择DLL(D)这一项。然后点击完成。就会出现下图。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.里面有一个源文件addfun.cpp,我们可以编辑里面的内容了。里面主要是我们想生成的函数。另外我们需要建立一个与addfun.cpp相对应的头文件addfun.h。直接右键到头文件—>添加—>新建项—>选头文件,命名为addfun.h。头文件就我们想生成的dll的函数名了。
3.现在我们开始编辑addfun.cpp文件了。如下所示:

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

#include "stdafx.h"
#include "addfun.h"

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

4.然后我们再编辑addfun.h,如下所示:

#pragma once
#include "stdafx.h"

extern "C"
{
	_declspec(dllexport) int add(int a, int b);
	typedef int(*ApiAdd)(int, int);
}

按照上面的格式我们编译就能生成我们想要的dll的api。

通过以上4步,我们可以在工程的Debug目录下找到addfun.dll和addfun.lib。
注意,win86生成的是32位的dll,我们选择X64生成64的dll比较好
在这里插入图片描述
下面我们就开始介绍怎么来调用一个dll。
1.建立一个c++工程,就建立一个空文件就可以了。命名为testadd,然后将在这里插入图片描述
这四个文件,以及debug中的addfun.dll复制进来,
直接右键头文件,添加现有项把addfun.h添加过来。添加过来是这样的:

#pragma once
#include "stdafx.h"

extern "C"
{
	_declspec(dllexport) int add(int a, int b);
	typedef int(*ApiAdd)(int, int);
}

但是现在我们需要修改它,不要再生产dll,我们需要把它改为

#pragma once
#include "stdafx.h"

extern "C"
{
	 int add(int a, int b);
	typedef int(*ApiAdd)(int, int);
}

上面代码和下面代码区别在于少了_declspec(dllexport),这个是生成dll的,我们现在不需要了。
2.下面展示下如何在主函数中加载并调用dll:

#include "stdafx.h"
#include <Windows.h>
#include "addfun.h"
#include<iostream>
#include<stdlib.h>
#include <tchar.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int a = 2, b = 1, c = 0;
	HINSTANCE hDllInst = LoadLibrary("addfun.dll");
	ApiAdd myfun = 0;
	myfun = (ApiAdd)GetProcAddress(hDllInst, "add");
	// youFuntionName 在DLL中声明的函数名
	if (myfun)
	{
		c = myfun(a, b);
	}

	FreeLibrary(hDllInst);
	cout << c << endl;
	system("pause");
	return 0;
}

这是程序这一行会有红色波浪 HINSTANCE hDllInst = LoadLibrary(“addfun.dll”);
这样修改:右键工程(addtest)—>属性—>常规—>字符集。
在这里插入图片描述

ApiAdd 可能会有红线, 不管他, 能生成就行。
好的,现在就算把程序调用成功了。下面就是结果了:
在这里插入图片描述
所以制作dll也不是很难。
其他所有函数都可以这样来做,我们只需要把我们想打包的函数在头文件中指明,然后想使用这些函数的时候,头文件包含进去并把_declspec(dllexport)删除就可以了。然后load相应的dll就可以了。

参考链接 :https://blog.csdn.net/hlx371240/article/details/51507025
git地址:https://github.com/haishibuxiguan/hello.git

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值