静态链接DLL:
需要设置“附加包含目录”,“附加库目录”以及“附加依赖项”。



然后通过外部引用函数定义即可。
#include <stdio.h> #include <Windows.h> extern int add(int a, int b); int main(int argc, char* argv[]) { MessageBoxW(NULL, L"Test", L"Test", MB_OK); printf("5 + 3 = %d", add(5, 3)); return 0; }
动态调用DLL:
即通过函数调用的方式获得所需函数的地址,然后通过函数指针的方式调用函数。
#include <stdio.h> #include <Windows.h> int main(int argc, char* argv[]) { HMODULE load_lib = NULL; FARPROC get_proc_add = 0; MessageBoxW(NULL, L"Test", L"Test", MB_OK); do { load_lib = LoadLibraryW(L"C:\\Users\\Raiseki\\source\\repos\\dll_learn\\x64\\Debug\\dll_learn.dll"); if (load_lib == NULL) { break; } get_proc_add = GetProcAddress(load_lib, "add"); if (get_proc_add == NULL) { break; } printf("5 + 3 = %lld", get_proc_add(5, 3)); } while (0); return 0; }
注意:
当找不到DLL文件时,采用静态链接方式的程序系统会报错且无法运行。而采用动态调用方式的程序虽然无法调用到所需函数,但系统不会报错。