如何将指针作为参数传递给 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* 转换为QVariantQVariant 类没有相应的方法)。可能的解决方案:

    试试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 对象中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过原始指针将闭包作为参数传递给 C 函数?

将取消引用的指针作为函数参数传递给结构

C将int数组指针作为参数传递给函数

如何将 C# 对象作为参数传递给 Javascript 函数

如何将 unique_ptr 对象作为参数传递给作为库的类

将 shared_ptr 作为参数传递给接受类类型对象的函数