【问题标题】:How to use dll's?如何使用dll?
【发布时间】:2010-11-23 15:48:50
【问题描述】:

我知道如果我有一个 .a 或 .so 文件以及该库的头文件(例如 SystemC),我应该 1.包含头文件 2.链接相应的库。

但我不能只处理 .dll 文件,因为我也可以链接它,但没有要包含和使用命令的听者文件。有人向我解释存在什么样的 .dll-s 以及如何使用它们?是否可以使用任何 .dll 文件,或者它应该是一种特定类型的 .dll 才能集成到我的应用程序中?

【问题讨论】:

标签: c++


【解决方案1】:

与 Linux 不同,Windows 库分为两种形式:DLL(用于运行时链接)和 LIB 用于符号声明。 link.exe(windows 链接器)需要 .lib 文件来解析程序头文件在构建期间使用的符号。更多信息在这里: http://msdn.microsoft.com/en-us/library/ba1z7822(VS.71).aspx

【讨论】:

    【解决方案2】:

    DLL 在功能上等同于 .so 文件(也称为“共享对象”或“共享库”)。您需要一个标头来声明 DLL 中可用的函数,并且您需要链接到一个库,该库处理加载和执行 DLL 调用(主要委托给操作系统)的业务。

    可以使用没有任何类型头文件的 DLL。您可以直接调用 Win32 API,它将动态加载 DLL 到您的程序虚拟地址空间中,并调用其他 API,这将为您提供本质上是函数指针的内容。但是,您需要知道函数指针的签名才能正确使用,因此在这种情况下您实际上要做的是声明实际 DLL 标头的一小部分供您使用。

    这个wikipedia article 可能会有所帮助,尤其是关于共享库的部分

    【讨论】:

      【解决方案3】:

      请注意,如果您加载用 C++ 编译的 DLL,您必须避免通过接口传递对象指针,因为它们通常不可移植。您必须遵守基本的 C 调用和调用约定,因为这是由 Windows 或 Linux 平台 ABI 定义的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-30
        • 2018-07-22
        相关资源
        最近更新 更多