【问题标题】:How to use the .def file for explicit linking?如何使用 .def 文件进行显式链接?
【发布时间】:2010-12-22 16:41:11
【问题描述】:

我正面临链接到第三方 dll 的问题。它是 windows 移动应用程序,我试图链接到这个第三方 dll。

首先我有 dll 和 lib 文件。我无法明确链接到它,但隐式链接正在工作。在显式链接中,getprocaddress 失败。 dumpbin 只显示 dllmain 函数被公开,没有其他函数被公开,因此 getprocaddress 失败。 但是,如果在设备中找不到/安装 dll,我的应用程序不会启动。这是预期的,因为它是 dll 的隐式链接,因此我的应用程序无法启动。

我将此情况报告给第三方 dll 提供商,并说我想要显式链接,因为如果隐式链接 dll 在我的应用程序中占用更多空间。 他们通过提供 .def 文件进行回复,并说我可以在我的应用程序中使用此 .def 文件来显式链接到 dll。

我不知道如何使用这个 .def 文件显式链接到 dll。谁能简要解释一下如何在我的应用程序中使用这个 .def 文件来显式链接到 dll。

【问题讨论】:

    标签: dll visual-studio-2005 linker function


    【解决方案1】:

    在构建 DLL 时使用 *.def 文件来指定 DLL 应该导出的函数名称。

    构建DLL后,使用dumpbin /exports验证函数确实是从DLL中导出的。

    在您确认 DLL 正在导出函数后,您可以在运行时使用 LoadLibray/GetProcAddress 链接到它们,和/或您可以在构建时通过传递 DLL 的 *.lib 文件链接到它们(它是在您使用其 *.def 文件构建 DLL 时创建的)作为应用程序链接器的参数。

    【讨论】:

    • 你好chrisW,我没有构建dll的源文件,我只有第三方提供的dll、lib和对应的.def文件。
    • 您说,“dumpbin 只显示 dllmain 函数被公开,没有其他函数被公开,因此 getprocaddress 失败。”如果没有导出其他功能,那么我认为即使使用 *.def 文件也无法链接到它们。 O/S 的运行时加载程序(执行动态链接)希望使用 DLL 导出的函数。
    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多