【问题标题】:How do I use functions from a DLL?如何使用 DLL 中的函数?
【发布时间】:2013-01-31 02:52:58
【问题描述】:

如何使用 DLL 中的函数?我是个新手,我不太了解如何使用 DLL 文件中的函数。我正在尝试使用 MS Visual Studio 2008 (C++)。

我的理解是DLL文件会有相应的头文件,只要我在代码中包含头文件并正常调用函数,它应该可以工作吗?那是对的吗?那么我只需要让编译后的exe文件能够找到DLL吗?

请让我知道这是否是一个远程正确的理解!

谢谢!

罗素

【问题讨论】:

标签: visual-studio-2008 dll


【解决方案1】:

要重用在 DLL 中声明的函数,您有两种选择:

第一个(也是最好的)是包含相应的头文件,声明您要使用的函数,然后链接到相应的.lib。这第二步似乎是静态链接到函数,但实际上最终是一个存根调用,当调用相应 DLL 中包含的第一个函数时,它将把 DLL 加载到内存中。例如,要使用CreateWindowEx 函数,您需要包含“WinUser.h”标头并链接到“User32.lib”库。

第二个选项是手动加载库。为此,您将调用LoadLibrary 函数以获取导出所需函数的DLL 的句柄,然后使用GetProcAddress 获取指向该函数的指针。返回的指针需要转换为适当的类型,然后您可以将其用作任何常规函数指针。仅当您无权访问实现者的头文件和库时才建议使用此选项,因为在您的函数声明中存在使用错误参数或不匹配调用约定的风险。

PS - 我稍微简化了一点,但这是该过程的核心。

【讨论】:

    【解决方案2】:

    一个非常简单的 Google 搜索为您返回了答案。

    http://www.google.com/search?hl=en&site=&q=How+do+I+use+functions+from+a+DLL+in+Visual+Studio&btnG=Search

    第一个链接,阅读了几个部分,然后遇到了“从 Visual Basic 应用程序调用 DLL 函数”http://msdn.microsoft.com/en-us/library/dt232c9t.aspx

    【讨论】:

    • 不错的尝试,但我认为这不适合这个问题。
    • 你注意到他在问 C++ 并且那个链接是针对 Visual Basic 的吗?
    • 哦,我又有点自大了,对不起,我误读了文章链接:(
    【解决方案3】:

    你在正确的轨道上,但错过了一个重要的步骤。

    为了使用 DLL,您还需要链接到它的导入库。为此,您可以在 Linker / Input / Additional Dependencies 下指定导入库的名称。

    【讨论】:

      【解决方案4】:

      有很多方法可以将 DLL 链接到 C++ 应用程序!

      1. 在您的项目中包含 DLL 头文件和 Lib 文件(包含链接信息)和 调用 DLL 函数作为普通函数。缺点是应用程序在启动时会加载 DLL,如果在 %path% 或基目录中找不到它会抛出异常。

      2. 使用 LoadLibrary API 和 GetProcAddress API 方法加载库。这样就需要在LoadLibrary中传递DLL路径,如果加载成功,就可以使用函数指针来访问需要调用的函数。详细阅读示例here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        相关资源
        最近更新 更多