zoukankan      html  css  js  c++  java
  • Windows下C语言调用dll动态链接库

    dll是windows下的动态链接库文件,下面记录一下在windows下如何调用C语言开发的dll动态链接库。

    1.dll动态链接库的源代码

    hello_dll.c

    #include "stdio.h"
    
    _declspec(dllexport) void test_print(char const *str)
    {
        printf("%s
    ", str);
    }
    
    _declspec(dllexport) int test_add(int a, int b)
    {
        return a + b;
    }

    上面的代码定义了两个函数,第一个函数需要传入一个字符串,然后打印出这个字符串,第二个函数需要转入两个int型整数,然后返回这两个整数的和。

    执行 cl -LD hello_dll.c 会生成hello_dll.dll文件

    2.main函数的源代码

    test_hello_dll.c

    #include <stdlib.h>
    #include <windows.h>
    
    int main(int argc, char const *argv[])
    {
        // define two functional pointer
        void(*p_test_print)(char const *) = NULL;
        int(*p_test_add)(int, int) = NULL;
    
        int add_result;
    
        // load dll file, require window.h file
        HMODULE module = LoadLibraryA("hello_dll.dll");
        if (module == NULL) {
            system("error load");
        }
        p_test_print = (void(*)(char const *))GetProcAddress(module, "test_print");
        p_test_add = (int(*)(int, int))GetProcAddress(module, "test_add");
        if (p_test_print != NULL) {
            p_test_print("Hello This is from dll");
        } else {
            system("function p_test_print can not excute");
        }
        if (p_test_add != NULL) {
            add_result = p_test_add(5, 5);
            printf("Add result is %d
    ", add_result);
        } else {
            system("function p_test_print can not excute");
        }
        FreeLibrary(module);
        system("pause");
        return 0;
    }

    执行 cl test_hello_dll.c 会生成test_hello_dll.exe的可执行文件。

    运行该文件,可以成功调用dll文件中定义的函数。

  • 相关阅读:
    一键清理 Nexus 中无用的 Docker 镜像
    python 获取Linux和Windows硬件信息
    基于Docker安装破解版Jira(无坑)
    vim安装vundle时遇到的问题
    SpringBoot注解大全
    SpringBoot 应用JPA中的一些知识点
    记录初学SpringBoot使用Redis序列化的坑
    Spring Boot连接MySql报错
    钉钉扫码登录中的签名算法在python中的实现
    让Linux的history命令显示用户名和时间
  • 原文地址:https://www.cnblogs.com/shizqiang/p/5523824.html
Copyright © 2011-2022 走看看