Ответил на ru.stackoverflow, просто перевод моего ответа
Согласно документации QAxBase::dynamicCall()
он принимает параметры функции, как const QVariant&
. Компилятор не знает, как конвертировать long*
в QVariant
(класс QVariant
не имеет соответствующих методов). Возможные решения:
- Пробег:
QAxBase::generateDocumentation()
. Может быть, есть аналогичная функция, которая не использует указатели;
- Проход
long*
в QVariant
;
- Используйте
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
Вопросы ищут отладки помощи («почему не этот код работает?») Должен включать в себя желаемое поведение, конкретную проблему или ошибку и короткий код, необходимый для воспроизведения его в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – Drop
Извините, я frim Россия, и теперь я очень плохо владею английским языком, я хочу использовать библиотеку COM dll. Я создал адаптер QAxObject *; для этого. Когда я передаю простой аргумент, все хорошо, но нужно передать указатель –