用C++在QT中加载COM DLL(无标头)



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

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

我所做的是,我导入2个photoshop dll(注意:我没有.h或.lib,只有.dll文件)我用来导入这些dll的方法是通过导入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;
}

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

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

然后,在那之后,它说(显然)"Photoshop"没有被宣布。

现在,我搜索了一下,找到的最接近的解决方案是包含在我的VC++项目上创建的.tlh文件,但当我这样做时,我收到了1000多个错误和警告,所以这显然不起作用。

有人能告诉我在这里做什么吗?我被卡住了!

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

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

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

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

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

最新更新