代码之家  ›  专栏  ›  技术社区  ›  Roddy

lua“stub”dll用于Windows的目的是什么?

  •  2
  • Roddy  · 技术社区  · 14 年前

    我正在考虑将Lua合并到C++项目中,并且在两个二进制文件(Lua51.DLL和Lua5.1.dll)的存在中有点困惑。 Luabinaries .

    根据文件……

    在Windows中,您的库或应用程序 必须与存根库链接。一 存根库是一个只有 函数声明将 用lua dll绑定您的dll。

    为什么?在与第三方DLL链接之前,我从未需要过存根DLL?

    2 回复  |  直到 9 年前
        1
  •  7
  •   interjay    14 年前

    存根库是 .lib 文件,而不是dll。它包含dll中所有导出函数的函数声明,这些函数只是将调用转发到dll本身。因此,如果您构建一个要与之链接的应用程序 lua51.dll ,告诉链接器链接 lua51.lib ,所有对导出函数的调用都将转发到dll。如果不这样做,链接时会出现很多“未解决的外部符号”错误。

    只有在与dll静态链接时才需要这样做(以便在应用程序运行时自动加载)。动态加载dll时不需要 LoadLibrary .

    关于他们为什么有两个不同的DLL,手册上说:

    luabinaries dll包有一个名为“lua51.dll”的dll代理。它可以用来替换其他发行版发布的其他“lua51.dll”。它只是将调用转发到“lua5.1.dll”。转发中不涉及已编译的源代码。

    基本上,一些现有的应用程序与 lua5.1.dll 而其他人则与 LUA51.DLL 他们都想支持他们。在任何情况下,这都与存根库无关。

        2
  •  0
  •   Puppy    14 年前

    我认为这与u declspec(导入)和u declspec(导出)对getprocaddress有关。然而,我并不确定。