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\n", 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\n", 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文件中定義的函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM