【问题标题】:Loading a COM DLL (no headers) in QT with C++?使用 C++ 在 QT 中加载 COM DLL(无头文件)?
【发布时间】:2012-02-23 01:01:18
【问题描述】:

我刚开始使用 QT。现在我需要将我在 Visual C++ 项目中的一些代码转移到 QT。

项目目前唯一要做的就是打开photoshop并将可见标志设置为false(它将用于自动化,所以稍后会添加很多东西)。

我所做的是,我导入 2 个 photoshop dll(注意:我没有它们的 .h 或 .lib,只有 .dll 文件) 我用来导入这些 dll 的方法是通过 import libid,因为我尝试过的所有其他方法都不起作用。顺便说一句,它们是 COM 对象。

这是我的 VC++ 代码:

//library ID of Photoshop.dll
#import "libid:E891EE9A-D0AE-4cb4-8871-F92C0109F18E" 
//library ID of PhotoshopTypeLibrary.dll
#import "libid:4B0AB3E1-80F1-11CF-86B4-444553540000" 

int main()
{
    Photoshop::_ApplicationPtr app( __uuidof(Photoshop::Application));
    app->Visible = false;

    return 0;
}

现在,我正在使用带有 MinGW 的 QT Creator 来编译这段代码,它在导入行上给了我一些警告和错误:

warning: #import is a deprecated GCC extension
error: libid:E891EE9A-D0AE-4cb4-8871-F92C0109F18E: No such file or directory

然后,在那之后,它说(显然)没有声明“Photoshop”。

现在,我搜索并找到最接近的解决方案是包含在我的 VC++ 项目中创建的 .tlh 文件,但是当我这样做时,我收到了超过 1000 个错误和警告,所以显然没有工作。

有人可以告诉我在这里做什么吗?我被严重卡住了!

【问题讨论】:

  • #import 不是标准 C++,你从哪里读到的?
  • 我只是想知道如何在 QT 中做到这一点,例如,等效的方式是什么
  • 您可以使用 MSVC 编译 Qt 代码(通过使用 Visual Studio 中的 Qt VS 插件,而不是 Qt Creator)。有什么阻止你这样做(因为 COM 是 Windows-only...)?

标签: c++ qt dll com import


【解决方案1】:

#import 是一个 Microsoft 扩展,可用于在 VisualC++ 中导入 COM 库。

从您的问题看来,您似乎可以访问 VisualC++,但您的 QT 代码是使用 gcc 编译的。

如果您在 VisualC++ 中创建一个简单的项目,您可以添加#import 代码并编译它。 您会发现编译器已经生成了一个 .tlh 和 .tli 文件。 这些文件包含使用 COM 库所需的所有信息,并且可供任何编译器使用。

然后您可以将这些文件复制到您的 gcc 项目目录并在这些生成的文件上使用#include(而不是#import)。

.tlh 相当于一个 c++ 头文件,.tli 更像一个 .cpp 文件。

【讨论】:

  • 谢谢你的回复,morechilli。但是,正如您在我的帖子末尾看到的那样,我已经尝试过了,但没有成功,它给了我一千多个错误。您还有其他建议吗?
  • 应该是正确的做法。有了这么多的错误,可能会有 1 或 2 个系统问题重复多次。 #import 有许多用于排除基础库或添加命名空间以避免冲突的选项。如果您发布一些可能提供更多信息的错误示例。
  • 他需要 comsupp.lib 的头文件来编译 .tlh/i 文件(comdef.h 等)。在 mingw 上不可用,有数千个错误。只有使用原生 com 完全重写才行。
  • 我从未使用过 QT,但它似乎带有支持使用 COM 对象的实现 - 请参阅此问题 stackoverflow.com/questions/8211459/qt-using-shared-com-object
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多