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

使用的利弊。def文件

  •  1
  • user5708257  · 技术社区  · 7 年前

    我不理解这一段:

    在中导出函数。def文件使您可以控制导出序号。将导出函数添加到DLL时,可以为其指定比任何其他导出函数更高的序号值。执行此操作时,使用隐式链接的应用程序不必与包含新函数的导入库重新链接。如果您正在设计一个供许多应用程序使用的DLL,这将非常方便,因为您可以添加新功能,还可以确保它在已经依赖它的应用程序中继续正常工作。例如,MFC DLL是通过使用构建的。def文件。

    为什么应用程序在使用时不必与导入库重新链接。如果函数添加到dll中,是否使用def文件而不是\uu declspec(dllexport)?

    查阅 https://docs.microsoft.com/en-us/cpp/build/determining-which-exporting-method-to-use

    2 回复  |  直到 7 年前
        1
  •  0
  •   SergeyA    7 年前

    这是因为MSFT实现共享对象(或DLL)的一些细节。在Microsoft world中,为了将函数导入到进程中,您不仅需要共享代码本身(.dll),还需要特殊的“导入”库,即 .lib 文件此文件以静态方式链接到应用程序中(因为它是一个静态库)。该库在函数名和函数序号之间提供“粘合”。

    通常,每次发布新版本的DLL时,所有使用该DLL的应用程序都必须与新版本的静态导入库重新链接( 。lib公司 )才能使用此新的DLL库。这是因为创建新库后,函数序号通常不再有效。但是,如果您使用 .def 文件中,您可以手动分配序号,并确保序号对于以前可用的函数保持不变,从而 。lib公司 文件仍然有效。

        2
  •  0
  •   Victor Gubin    7 年前

    好的,如果你有。def文件您可以使用它创建导入库。

    一、 e。 mydll.lib 对于MS VC++或 mylib-dll.a 对于GCC

    编译器和链接器更喜欢自己的二进制格式导入库,通常彼此不兼容。当您的DLL是用C/C++编写的,而您的程序是用其他语言编写的,如Ada/FORTRAN/Object Pascal等,或者反之亦然,这一点尤其重要。所以def文件可用于创建兼容的导入库。

    段落告诉您如何通过手动编辑从导入库中隐藏某些函数。DEF文件并指示链接器隐藏某些函数。