2016-03-03 3 views
0
Adaptor->dynamicCall("GetWPlace(long, long*, long*, BSTR*)", i, &DevplaceId,&DevplaceNum,&WPComments); 

У меня есть ошибкиКак передать указатель в качестве параметра функции в объект COM?

QVariant :: QVariant (пустота *)»является частным

Что Вранг? Я использую Qt 4.8.4

+0

Вопросы ищут отладки помощи («почему не этот код работает?») Должен включать в себя желаемое поведение, конкретную проблему или ошибку и короткий код, необходимый для воспроизведения его в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – Drop

+0

Извините, я frim Россия, и теперь я очень плохо владею английским языком, я хочу использовать библиотеку COM dll. Я создал адаптер QAxObject *; для этого. Когда я передаю простой аргумент, все хорошо, но нужно передать указатель –

ответ

0

Ответил на ru.stackoverflow, просто перевод моего ответа

Согласно документации QAxBase::dynamicCall() он принимает параметры функции, как const QVariant&. Компилятор не знает, как конвертировать long* в QVariant (класс QVariant не имеет соответствующих методов). Возможные решения:

  1. Пробег: QAxBase::generateDocumentation(). Может быть, есть аналогичная функция, которая не использует указатели;
  2. Проход long* в QVariant;
  3. Используйте queryInterface() и вызовите функцию напрямую.

Хотя случай 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 описан в документации к QAxBase: http://doc.qt.io/qt-4.8/qaxbase.html

Смежные вопросы