Добрый вечер.
Ситуация такая: есть замечательный отечественный прибор "Ретом 51". Требуется написать программу управления прибором.
Операционка XP SP2. Версия QT 4.7.4
Производитель предоставляет интерфейс для работы с прибором в виде COM сервера и кое-какое описание всего этого.
Делаю так:
создаю в QT Creator-е новый проект, прописываю в файле .pro:
TYPELIBS = RTDI.tlb ,где RTDI.tlb -файл, предоставленный производителем
dumpcpp создаёт файлы RTDI.cpp и RTDI.h. Подключаю их к проекту.
Вот файл ret.pro:
QT += core gui
TARGET = ret
TEMPLATE = app
CONFIG += qaxcontainer
TYPELIBS = RTDI.tlb
SOURCES += main.cpp\
mainwindow.cpp\
RTDI.cpp
HEADERS += mainwindow.h\
RTDI.h
FORMS += mainwindow.ui
В файле mainwindow.h прописываю:
using namespace RTDI;
Дальше :
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
IDualServer retom;
retom.setControl("RTDI.DualServer"); //создаю экземпляр интерфейса
//при этом в трее появляется иконка сервера
QVariant *list=new QVariant;
//Следующая функция должна получать список приборов, подключенных к компьютеру
int rez=retom.Check(*list); //при выполнении этой функции программа вылетает с сообщением Runtime Error!
ui->setupUi(this);
}
Вот, что говорит о функции Check фирменная документация:
Check
long Check (VARIANT* vRTList);
Описание:
Осуществляет поиск подключенных к компьютеру приборов РЕТОМ-51.
Возвращаемое значение:
В случае успешного завершения ненулевое значение, в противном случае «0».
Параметры:
vRTList
Массив записей типа IRTListDevice, через который возвращается список подключенных приборов.
А так выглядит её прототип в файле RTDI.h:
inline int DualServer::Check(QVariant& vRTList)
{
int qax_result;
void *_a[] = {(void*)&qax_result, (void*)&vRTList};
qt_metacall(QMetaObject::InvokeMetaMethod, 19, _a);
return qax_result;
}
Вывод приложения при возникновении ошибки выглядит так:
ASSERT: "id < 0" in file c:\ndk_buildrepos\qt-desktop\src\activeqt\container\qaxbase.cpp, line 3717
Что это за файл такой qaxbase.cpp я так и не понял.
Второй день сижу. Много уже чего перечитал и перепробовал. Идеи кончились.
Подскажите, в каком направлении ещё можно по копать.