C++ DLL动态库怎么创建与调用

发布时间:2022-05-20 11:26:07 作者:iii
来源:亿速云 阅读:228

C++ DLL动态库怎么创建与调用

动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中一种常见的共享库形式。通过使用DLL,多个程序可以共享相同的代码和资源,从而减少内存占用并提高代码的复用性。本文将介绍如何在C++中创建和调用DLL动态库。

1. 创建DLL动态库

1.1 创建DLL项目

首先,我们需要创建一个DLL项目。以Visual Studio为例,步骤如下:

  1. 打开Visual Studio,选择“创建新项目”。
  2. 在“创建新项目”对话框中,选择“动态链接库(DLL)”模板,然后点击“下一步”。
  3. 输入项目名称和位置,点击“创建”。

1.2 编写DLL代码

在创建好的DLL项目中,通常会有一个默认的dllmain.cpp文件。我们可以在这个文件中编写DLL的入口函数DllMain,但通常情况下,我们不需要修改这个函数。

接下来,我们需要在项目中添加一个新的头文件和源文件,用于定义和实现DLL的导出函数。

1.2.1 定义导出函数

在头文件中定义导出函数,并使用__declspec(dllexport)修饰符来标记这些函数为DLL的导出函数。

// MyDll.h
#pragma once

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

extern "C" MYDLL_API int Add(int a, int b);

1.2.2 实现导出函数

在源文件中实现导出函数。

// MyDll.cpp
#include "MyDll.h"

extern "C" MYDLL_API int Add(int a, int b) {
    return a + b;
}

1.3 编译DLL

完成代码编写后,点击“生成”->“生成解决方案”来编译DLL。编译成功后,会在输出目录中生成一个.dll文件和一个.lib文件。

2. 调用DLL动态库

2.1 隐式链接

隐式链接是指在编译时链接DLL的导入库(.lib文件),并在运行时加载DLL。

2.1.1 包含头文件

在调用DLL的项目中,包含DLL的头文件。

#include "MyDll.h"

2.1.2 链接导入库

在项目属性中,添加DLL的导入库路径和库名称。

  1. 右键点击项目,选择“属性”。
  2. 在“链接器”->“常规”->“附加库目录”中,添加DLL的.lib文件所在的目录。
  3. 在“链接器”->“输入”->“附加依赖项”中,添加DLL的.lib文件名称。

2.1.3 调用DLL函数

在代码中直接调用DLL的导出函数。

int main() {
    int result = Add(2, 3);
    std::cout << "Result: " << result << std::endl;
    return 0;
}

2.2 显式链接

显式链接是指在运行时通过API动态加载DLL并调用其中的函数。

2.2.1 加载DLL

使用LoadLibrary函数加载DLL。

#include <windows.h>

int main() {
    HMODULE hDll = LoadLibrary(L"MyDll.dll");
    if (hDll == NULL) {
        std::cerr << "Failed to load DLL" << std::endl;
        return 1;
    }

2.2.2 获取函数指针

使用GetProcAddress函数获取DLL中导出函数的指针。

    typedef int (*AddFunc)(int, int);
    AddFunc Add = (AddFunc)GetProcAddress(hDll, "Add");
    if (Add == NULL) {
        std::cerr << "Failed to get function address" << std::endl;
        FreeLibrary(hDll);
        return 1;
    }

2.2.3 调用DLL函数

通过函数指针调用DLL的导出函数。

    int result = Add(2, 3);
    std::cout << "Result: " << result << std::endl;

    FreeLibrary(hDll);
    return 0;
}

3. 总结

本文介绍了如何在C++中创建和调用DLL动态库。通过隐式链接和显式链接两种方式,我们可以灵活地在不同的场景中使用DLL。DLL的使用不仅可以提高代码的复用性,还能有效地减少内存占用,是Windows平台开发中不可或缺的一部分。

推荐阅读:
  1. 调用动态库!
  2. C# 调用 C++编译的Dll

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ dll

上一篇:Pytorch怎么实现简单自定义网络层

下一篇:python中常见进制之间的转换方式是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》