用C++在QT中加载COM DLL(无标头)
Loading a COM DLL (no headers) in QT with C++?
我刚开始使用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文件。
相关文章:
- g++ 说函数不存在,即使包含正确的标头
- C++ DLL 标头包括
- 如何将第三方 dll、标头和库文件与 Node N-API 一起使用
- C/C++ 标头、dll 和导出
- 将标头和 lib 转换为 dll 以将其与 c# 一起使用
- 如何从标头和库创建 DLL
- 如何在C 中访问无范围分辨率运算符的标头构件类型
- 当DLL( 标头)是预期的交付时,如何在C 中实现预测模型(具有100个参数的10种类型)
- 在C++中使用带有预编译标头的 #using < System.dll>
- 使用抽象接口C++ dll 边界 -标头中的智能指针>?叫删除?
- 内联和constexpr在标头中无捕获lambda有什么区别
- 是否有一种无偶然的方法来吸收类标头文件
- 包括无导入标头文件的常数
- 使用Linux C代码和标头文件来编译Windows DLL
- 在构建dll时,我需要在客户端的标头中提供多少个父级作为__declspec(导出)
- 链接器错误LNK2001在 DLL 中的 WINAPI 函数上,存在标头和库,我缺少什么
- Qt创建者-当dll的标头出现在多个位置时出错
- 正在修改dll-s的标头
- 用C++在QT中加载COM DLL(无标头)
- 无法在跨多个 DLL 的标头中定义单个对象