【C语言】三、动态链接库生成与调用

动态链接库生成

我的主机环境如下:

  • 操作系统:Windows 10
  • IDE:Clion
  • 编译器:MinGW

以下是整个生成链接库的步骤:

  • 1.新建工程,选择新建C Library,类型选择shared
    在这里插入图片描述

  • 2.编写一个计算圆面积和计算圆周长的函数

#include "library.h"

#include <stdio.h>

#define PI 3.1415926

double GetCircleArea(float r){
    
    
    return PI * r * r;
}

double GetCircleLength(float r){
    
    
    return PI * r * 2;
}

3.编译成dll文件
在这里插入图片描述

  • 4.在cmake-build-debug目录下就会生成一个可供调用的dll动态链接库文件

动态链接库的调用

下面是调用刚刚生成的动态链接库文件的代码:

#include <stdio.h>
#include<Windows.h>

int main() {
    
    
    HMODULE h = NULL;//创建一个句柄h
    h = LoadLibrary("libtestdll.dll");
    if (h == NULL)//检测是否加载dll成功
    {
    
    
        printf("加载libtestdll.dll动态库失败\n");
        return -1;
    }
    typedef double (*GetArea)(float); // 定义函数指针类型
    typedef double (*GetLength)(float); // 定义函数指针类型
    GetArea getArea;
    GetArea getLength;
    getArea = (GetArea) GetProcAddress(h,"GetCircleArea");
    getLength = (GetLength) GetProcAddress(h,"GetCircleLength");
    float r;
    printf("请输入圆的半径:\n");
    scanf("%f",&r);
    printf("圆面积为:%f\n",getArea(r));
    printf("圆周长为:%f\n",getLength(r));

    return 0;
}

注意:libtest.dll文件我是放在执行目录下的,所以写的文件路径其实是相对路径

猜你喜欢

转载自blog.csdn.net/m0_56963884/article/details/129302699