📜  DLL-提示(1)

📅  最后修改于: 2023-12-03 15:00:28.006000             🧑  作者: Mango

DLL 提示

什么是 DLL?

DLL,即动态链接库(Dynamic Link Library),是一种在运行时被调用的库。它可以包含代码和数据,被多个程序共享,并且每个程序运行时只需要加载一次,节省系统资源。

DLL 的使用
导入 DLL

在 Windows 平台上,程序可以使用 DLL 动态链接库提供的功能。以 C/C++ 语言为例,可以通过以下方式导入 DLL:

// 引入动态链接库
#include <windows.h>
// 加载 DLL
HINSTANCE hDLL = LoadLibrary("mydll.dll");
// 若加载失败,则返回 NULL

// 获取 DLL 中函数地址
int(*myFunction)(int) = (int(*)(int)) GetProcAddress(hDLL, "MyFunction");

// 调用 DLL 中的函数
int result = myFunction(10);

// 卸载 DLL
FreeLibrary(hDLL);
导出 DLL

在编写 DLL 时,需要将需要被外部程序调用的函数进行导出。可以使用 __declspec(dllexport) 在函数定义时导出函数:

__declspec(dllexport) int MyFunction(int arg)
{
    return arg * arg;
}

外部程序则可以通过上述示例中的 GetProcAddress 获取到该函数的地址,并使用该函数。

注意事项
  • 由于 DLL 是在运行时被加载的,因此对 DLL 中数据的修改可能会影响到其他已经加载该 DLL 的程序。

  • 导出函数时,函数名需要与 DLL 中实际的函数名一致。这意味着,如果使用 C++ 编写 DLL 时启用了名称修饰(name mangling),则需要在外部程序中通过 GetProcAddress 获取修饰后的函数名。

  • 在使用 DLL 时,需要注意库的版本兼容性。如果程序依赖的 DLL 版本不一致,可能会导致运行时错误。

总结

DLL 作为一种动态链接库,为 Windows 平台上的程序提供了丰富的功能。在使用 DLL 时需要注意避免对 DLL 中数据的私自修改以及版本兼容性问题。