在QT中使用C++加载COM DLL(无标题)?

问题描述:

我刚开始使用QT。现在我需要将我在Visual C++项目中的一些代码转移到QT。在QT中使用C++加载COM DLL(无标题)?

该项目确实在目前的唯一的事情就是打开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文件,但是当我这样做,我得到了超过1千个错误和警告,这样显然没”工作。

有人可以告诉我该怎么做吗?我被严重卡住了!

+0

#import不是标准的C++,你在哪里读到的? – Macke 2012-01-31 10:00:16

+0

我只是想了解如何在QT中做到这一点,比如,什么将是等效的方式 – godplusplus 2012-01-31 10:16:11

+0

您可以使用MSVC编译Qt代码(通过在Visual Studio中使用Qt VS加载项,而不是Qt Creator)。有什么阻止你这样做(因为COM是Windows - 只有无论如何...)? – Macke 2012-01-31 10:42:33

#import是Microsoft扩展,您可以使用导入COM库中VISUALC++。

从你的问题看来,如果你有机会VisualC++的,但你的QT代码用gcc编译。

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

然后,您可以在这些生成的文件,这些文件复制到你的GCC项目目录和使用的#include(不#IMPORT)。

的.tlh是一个C++头的equaivalent,所述.tli更像是cpp文件。

+0

谢谢你的回复,morechilli。但是,正如您在帖子末尾所看到的那样,我已经尝试过了,但它不起作用,它给了我超过一千个错误。 你有其他建议吗? – godplusplus 2012-01-31 10:41:58

+0

它应该是正确的方法。有了这些错误,可能会重复多次1或2个系统问题。 #import有许多选项用于排除基本库或添加名称空间以避免冲突。如果您发布了一些可能提供更多信息的错误示例。 – morechilli 2012-01-31 11:06:12

+0

此链接应该有所帮助:http://msdn.microsoft.com/en-us/library/298h7faa.aspx – morechilli 2012-01-31 11:07:29