在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千个错误和警告,这样显然没”工作。
有人可以告诉我该怎么做吗?我被严重卡住了!
#import
是Microsoft扩展,您可以使用导入COM库中VISUALC++。
从你的问题看来,如果你有机会VisualC++的,但你的QT代码用gcc编译。
如果你在VisualC++中创建一个简单的项目,你可以添加#import代码并编译它。 你会发现编译器已经生成了一个.tlh和.tli文件。 这些文件包含您需要使用COM库的所有信息,并且可以被任何编译器使用。
然后,您可以在这些生成的文件,这些文件复制到你的GCC项目目录和使用的#include(不#IMPORT)。
的.tlh是一个C++头的equaivalent,所述.tli更像是cpp文件。
谢谢你的回复,morechilli。但是,正如您在帖子末尾所看到的那样,我已经尝试过了,但它不起作用,它给了我超过一千个错误。 你有其他建议吗? – godplusplus 2012-01-31 10:41:58
它应该是正确的方法。有了这些错误,可能会重复多次1或2个系统问题。 #import有许多选项用于排除基本库或添加名称空间以避免冲突。如果您发布了一些可能提供更多信息的错误示例。 – morechilli 2012-01-31 11:06:12
此链接应该有所帮助:http://msdn.microsoft.com/en-us/library/298h7faa.aspx – morechilli 2012-01-31 11:07:29
#import不是标准的C++,你在哪里读到的? – Macke 2012-01-31 10:00:16
我只是想了解如何在QT中做到这一点,比如,什么将是等效的方式 – godplusplus 2012-01-31 10:16:11
您可以使用MSVC编译Qt代码(通过在Visual Studio中使用Qt VS加载项,而不是Qt Creator)。有什么阻止你这样做(因为COM是Windows - 只有无论如何...)? – Macke 2012-01-31 10:42:33