如何将指针作为参数传递给 COM 对象中的函数?
Posted
技术标签:
【中文标题】如何将指针作为参数传递给 COM 对象中的函数?【英文标题】:How can I pass a pointer as a parameter to a function in COM object? 【发布时间】:2016-03-03 11:32:06 【问题描述】:Adaptor->dynamicCall("GetWPlace(long, long*, long*, BSTR*)", i, &DevplaceId,&DevplaceNum,&WPComments);
我有错误
QVariant::QVariant(void*)' 是私有的
怎么了? 我使用 Qt 4.8.4
【问题讨论】:
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。 对不起,我是俄罗斯人,现在英语很差,我想使用 COM dll 库。我创建了 QAxObject *Adaptor;为了这。当我传递简单的参数时一切都很好,但是想要传递指针 【参考方案1】:在 ru.*** 上回答,只是翻译我的回答
根据QAxBase::dynamicCall()
的文档,它接受函数参数为const QVariant&
。编译器不知道如何将long*
转换为QVariant
(QVariant
类没有相应的方法)。可能的解决方案:
-
试试
QAxBase::generateDocumentation()
。可能有一个类似的函数不使用指针;
在QVariant
中传递long*
;
使用queryInterface()
,直接调用函数。
虽然case 1比较清楚,但是case 2描述在下面的示例代码中:
#include <QCoreApplication>
#include <QVariant>
#include <QDebug>
int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
long dig = 12345;
long* digPtr = &dig; // The pointer
qDebug() << digPtr; // Check pointer value in debug
// Convert long* to QVariant
QVariant var = qVariantFromValue((void*) digPtr);
// Convert QVariant в long*
long* ptr = (long*)var.value<void *>();
qDebug() << ptr; // Check the ponter value
return a.exec();
原解决方案:http://blog.bigpixel.ro/2010/04/storing-pointer-in-qvariant/。
案例3在文档中描述到QAxBase
:http://doc.qt.io/qt-4.8/qaxbase.html
【讨论】:
以上是关于如何将指针作为参数传递给 COM 对象中的函数?的主要内容,如果未能解决你的问题,请参考以下文章