静态链接DLL与动态调用DLL

静态链接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文件时,采用静态链接方式的程序系统会报错且无法运行。而采用动态调用方式的程序虽然无法调用到所需函数,但系统不会报错。