DLL教程--如何编写、调用DLL(附图说明)

本文详细介绍了如何在C++中创建和使用动态链接库(DLL),包括创建DLL项目、组织文件、添加头文件和源文件、编译生成DLL,以及如何在另一个项目中动态加载和调用DLL函数。
摘要由CSDN通过智能技术生成

参考文章:DLL教程 - 如何编写动态链接库 DLL_生成dll库-CSDN博客

1、编写DLL

1.1 创建DLL

这里取名DynamicLibrary

生成项目:

1.3 组织文件

创建一个新的 DLL 项目时,通常会自动生成一些预编译头文件和其他文件,这些文件的作用是帮助加快编译速度和提高代码组织结构。然而,并不是所有的预编译文件都是必需的,有时候可以根据项目需求删除一些不需要的文件。

  1. pch.h: 这是预编译头文件,用于包含需要在整个项目中都可用的标准头文件,以及经常使用但很少更改的自定义头文件。如果你决定不使用预编译头文件,可以将其删除。

  2. pch.cpp: 这是预编译源文件,用于编译预编译头文件。如果不使用预编译头文件,也可以将其删除。

  3. framework.h: 这个文件通常包含一些项目中经常使用的标准头文件,类似于 pch.h,但是它不是预编译头文件。如果你不需要这样的文件,也可以删除它。

  4. dllmain.cpp: 这是 DLL 的入口函数文件,包含了 DLL 的入口函数 DllMain。通常建议保留这个文件,因为 DllMain 函数是 DLL 的主要入口点,负责处理 DLL 的初始化和清理工作。

  5. 先在setting里面设置不使用预编译,然后删除预编译文件,见图3。本文只留dllmain.cpp

1.4 添加DLL的头文件和源文件

这里取名DynamicLibrary.h/DynamicLibrary.cpp

头文件:

#pragma once

extern "C" int __declspec(dllexport) add(int a, int b);

源文件:

#include"DynamicLibrary.h"
int add(int a, int b)
{
    return a + b;
}

1.5 编译程序生成DLL。

最后右键生成,默认会在<工程目录>\x64\Debug下生成DynamicLibrary.dll和DynamicLibrary.lib.

该lib文件不同于<https://blog.csdn.net/weixin_43758311/article/details/133955852>中的静态库文件,此lib文件只是dll文件中导出函数的声明和定位信息,并不包含函数的实现(而第一节中的静态库文件,包含了函数的实现),因此此lib文件只是在调用对应dll库的工程编译时使用,不需要随exe发布。

2、调用DLL

2.1 新建控制台项目

命名为DynamicLibraryLoader

2.2 添加代码源文件

DynamicLibraryLoader.cpp

#include <iostream>
#include <windows.h>

typedef int (*lpAddFun)(int, int); // 定义函数指针类型

int main()
{
    HINSTANCE hDll;     // DLL 句柄
    lpAddFun addFun;    // 函数指针
    hDll = LoadLibrary(L"DynamicLibrary.dll"); // 动态获取dll文件的路径
    if (hDll != nullptr)
    {
        addFun = (lpAddFun)GetProcAddress(hDll, "add"); // 根据函数名在dll文件中获取该函数的地址
        if (addFun != nullptr)
        {
            int result = addFun(2, 3);
            printf("2 + 3 = %d\n", result);
        }
        else
        {
            std::cout << "Failed to get function address.\n";
        }

        FreeLibrary(hDll);
    }
    else
    {
        std::cout << "Failed to load DLL.\n";
    }

    std::cout << "Hello World!\n";
    return 0;
}

运行项目。

输出:

但生成文件夹:C:\Users\Administrator\Desktop\Cpp_code\DynamicLibraryLoader\x64\Debug。

这个文件夹里有DynamicLibraryLoader.exe

2.3  转移DLL

拷贝DynamicLibrary.dll文件到DynamicLibraryLoader.exe所在目录

源目录:C:\Users\Administrator\Desktop\Cpp_code\DynamicLibrary\x64\Debug

目标目录:C:\Users\Administrator\Desktop\Cpp_code\DynamicLibraryLoader\x64\Debug

2.4 再次运行项目



 

创作不易,多多点赞。感谢前辈的付出,本博客参考大佬的文章:

DLL教程 - 如何编写动态链接库 DLL_生成dll库-CSDN博客

  • 32
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用electron-edge-js库调用C程序需要进行以下步骤: 1. 安装electron-edge-js库:可以通过npm install electron-edge-js命令来安装electron-edge-js库。 2. 在Electron的渲染进程中引入electron-edge-js库:可以使用require函数将electron-edge-js库引入到Electron的渲染进程文件中。 3. 准备C函数:在C文件中定义需要调用的函数。 4. 编译C代码:使用C编译器将C代码编译成可执行文件(如Windows平台的.exe文件、Mac平台的.dylib文件等)。 5. 创建配置文件:创建一个userconfig文件,该文件用于配置C函数的名称和所对应的dll文件路径或so文件路径等。 6. 在Electron的渲染进程中调用C函数:使用electron-edge-js库的func函数和userconfig配置文件中定义的函数名称来调用C函数。 下面是一个简单的例子: ```javascript // 引入electron-edge-js库 const edge = require('electron-edge-js'); // 创建配置文件 const userConfig = { assemblyFile: 'path/to/your/dll/file', typeName: 'NameSpace.ClassName', methodName: 'FunctionName' }; // 调用C函数 const cFunc = edge.func(userConfig); cFunc(parameters, (error, result) => { if (error) { // 处理错误 console.error(error); } else { // 处理结果 console.log(result); } }); ``` 在这个例子中,我们首先引入electron-edge-js库,然后创建一个userconfig配置文件,并定义要调用的C函数的相关信息。之后,使用electron-edge-js库的func函数来调用C函数,并传入参数。最后,处理C函数的返回结果或错误信息。 需要注意的是,具体的操作步骤和配置文件的内容可能会因为不同的C程序和操作系统而有所差异,需要根据实际情况进行适当的调整。以上只是一个简单的示例,提供了使用electron-edge-js库调用C程序的基本思路。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值