当前位置:   article > 正文

C++动态链接库(DLL)的创建及调用_c++ curl链接 dll生成

c++ curl链接 dll生成

1. 动态链接库生成

  1. 在新建项目中选择Visual C++,并且选择Win32控制台应用程序,填写项目名称,这里我把这个工程的名称名命为“dllExample.cpp”。点击确定
    创建文件1
    进入下一个页面,点击下一步

创建文件2
在应用程序设置窗口中,选择DLL以及预编译头,点击完成
创建文件3
新建一个header文件,这里我取名为dllExample.h。输入以下内容。

// dllExample.h
#pragma once

#define DLLEXAMPLE_EXPORT_API __declspec(dllexport)

extern "C" DLLEXAMPLE_EXPORT_API int add(int a, int b);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

#pragma once代表该文件只编译依次,不进行重复编译。
#define DLLEXAMPLE_EXPORT_API __declspec(dllexport)定义了一个名为DLLEXAMPLE_EXPORT_API的宏,这个宏代表__declspec(dllexport)。__declspec(dllexport)的作用是告诉编译器哪个函数是可以被外部访问的。
下一行代码中的 extern “C” 代表该接口可以被c++以外的语言待用使用。
下面新建一个dllExample.cpp的文件,用来实现add函数。

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

#include "stdafx.h"

#include "dllExample.h"

int add(int a, int b) {
	return a + b;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

右击工程,点击生成
build
如果生成成功可以看到下面的结果。
build2
在上述的debug或者release目录下可以看到生成的文件,下面我们主要会使用dllExample.dll和dllExample.lib这两个文件。
build3
这里会有几个坑,和大家分享一下:

  1. 生成dll文件时,不要点击运行,会跳出如下窗口报错。
    dll_bug1
  2. 注意你要生成的dll文件是debug还是release,是x86还是x64,在app调用时需要匹配一致。如果需要修改,可以在下面的选框里修改。
    dll_bug2
  3. 生成的.dll文件在工程目录下的目录下的debug或者release目录下(工程下面有两个debug/release目录,不要搞错了)。如果是x64在工程目录下会有一个x64的目录下面,x64目录会有debug或者release的目录。
  4. #include "stdafx.h"主要用于预编译[1],必须放在最前面。
  5. 如果在编译中出现了strcpy,fopen等函数,可能会导致栈溢出,因此会报错。

error C4996: ‘strcpy’: This function or variable may be unsafe.error

此时可以将strcpy,fopen改成strcpy_s和fopen_s。或者在项目属性中的C/C++预处理器中的预处理器定义里添加_CRT_SECURE_NO_WARNINGS。[2]
dll_debug3

2. 动态链接库的调用

调用dll库需要新建一个新的工程,点击Visual C++中的Win32控制台应用程序,并且将其名命为dllClient。
app1
在应用程序类型中选择控制台应用程序,附加选项中选择预编译头完全开发生命周期(SDL)检查( C )。点击完成
app2
在项目中的源文件中,新建一个dllclient.cpp的文件。

// dllClient.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "dllExample.h"
#include <iostream>

using namespace std;


int main()
{
	int a = 1;
	int b = 2;
	int c = add(a, b);
	cout << "1 + 2 = " << c << endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

现在在#include"dllExample.h"的#include下会有一个红色下划线,如下图所示。这是因为include默认的目录下无法找到dllExample.h及其关联文件。
在这里插入图片描述
一般有以下三种方法:
方法1 --直接将文件拷贝到目录下
这里读者可以直接把dllExample.h,dllExample.lib和dllExample.dll文件,复制到dllclient的工程目录下面,在上述代码的using namespace std;下面添加一句

#pragma comment(lib, “dllExample.lib”)

点击运行可以得到如下结果。
在这里插入图片描述
方法2 --设置C/C++的附加库目录
如果文件依赖较多,不方便直接拷贝到工程目录下,可以在工程目录下进行如下操作:
首先在工程属性中的C/C++常规附加包含目录,中将dllExample.h文件的所在路径添加进去。这里需要注意的是配置选项中的debug/release以及平台x64或者x86需要与编译时的选项一致。
在这里插入图片描述
链接器常规里的附加库目录里添加dllExample.lib的所在路径。
在这里插入图片描述
链接器输入里的附加依赖项里添加dllExample.lib。
在这里插入图片描述
生成事件后期生成事件里的命令行里添加以下命令。

xcopy /y /d “/dir/dllExample.dll”

/dir为实际的dll文件所在的路径。
在这里插入图片描述
方法3 --在VC目录中设置
如果整个工程只有C++文件。可以直接在VC目录里设置。
VC++目录下的包含目录里添加dllExample.h所在的路径,在库目录里添加dllExmaple.lib所在的路径。
在这里插入图片描述
链接器输入里的附加依赖项里添加dllExample.lib。
在这里插入图片描述
生成事件后期生成事件里的命令行里添加以下命令。

xcopy /y /d “/dir/dllExample.dll”

/dir为实际的dll文件所在的路径。

[1] https://blog.csdn.net/sinat_36053757/article/details/71265257
[2] https://blog.csdn.net/u010182186/article/details/74936224

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/204329
推荐阅读
相关标签
  

闽ICP备14008679号