如何将指针作为参数传递给COM对象中的函数?

时间:2016-03-03 11:32:07

标签: c++ qt dll

@Id
@Column(name = "COLUMN_NAME", nullable = false)
public Long getId() {
    return id;
}

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = SomeCustomEntity.class)
@JoinColumn(name = "COLUMN_NAME", referencedColumnName = "COLUMN_NAME", nullable = false, updatable = false, insertable = false)
@org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
public List<SomeCustomEntity> getAbschreibareAustattungen() {
    return abschreibareAustattungen;
}

我有错误

  

的QVariant ::的QVariant(无效*)&#39;是私人的

什么是争吵? 我使用Qt 4.8.4

1 个答案:

答案 0 :(得分:0)

在ru.stackoverflow上回答,只是翻译我的回答

根据QAxBase::dynamicCall()的文档,它接受函数参数const QVariant&。编译器不知道如何将long*转换为QVariantQVariant类没有相应的方法)。可能的解决方案:

  1. 试试QAxBase::generateDocumentation()。可能有一个类似的功能,不使用指针;
  2. long*;
  3. 中传递QVariant
  4. 使用queryInterface()并直接调用该函数。
  5. 虽然案例1相对清楚,但案例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在QAxBasehttp://doc.qt.io/qt-4.8/qaxbase.html

    的文档中进行了描述