一、先上伪代码
#include <QAxObject>
#include <qt_windows.h>
bool Init(char cMode)
{
QAxObject m_QAxObj;
QVariantList params0;
QString qresult;
int engine_hand;
HRESULT hres = CoInitializeEx(0, COINIT_MULTITHREADED );
if (hres != S_OK && hres != 0x80010106)
{
hres = CoInitializeEx( 0, COINIT_APARTMENTTHREADED );
if (hres != S_OK && hres != 0x80010106)
{
qWarning("Qt:初始化Ole失败(error %x)",(unsigned int)hres);
return 0;
}
}
b_re = m_QAxObj.setControl(QString::fromLocal8Bit("{7B3333C0-FDA0-11CE-8B06-444553540000}") );
params0.clear();
params0<<QVariant( 0 );
params0<<QVariant( qresult );
//int getHandle(int engin_type, QString &result)
engine_hand = m_QAxObj.dynamicCall( "getHandle(QVariant)", params0 );
}
首先包含COM组件需要使用的两个头件。 CoInitializeEx()函数返回的不一定是S_OK,因为如果在主进程中使用的话,组件初始化用QT预先调用了,这时返回值是0x80010106,因此此两种情况下都应该认识初始化成功。
调用C

本文详细介绍了在Qt环境中使用COM组件时遇到的问题及解决方案,包括COM组件初始化的特殊情况,动态调用参数传递的注意事项,以及线程使用过程中出现的RPC服务器不可用错误。此外,还讨论了在Qt中使用QFileDialog时遭遇KernelBase.dll的第一机会异常问题,通过对比系统文件发现是kernelbase.dll版本过旧,更新系统和补丁后问题得以解决。
最低0.47元/天 解锁文章
951

被折叠的 条评论
为什么被折叠?



