Ошибка подтверждения "id <0" в Qt ActiveX - PullRequest
0 голосов
/ 09 октября 2018

Я создаю программу, используя Microsoft Access 2010 ActiveX (COM) для отображения ссылок проекта (файл .adp):

Access::Application* app = new Access::Application(nullptr);
app->SetVisible(true);

app->OpenAccessProject("E:\\solulog_dev\\SoluTools\\app\\test\\sources\\utilitaires\\liste_aide.adp", true);

int nb_ref = app->References()->Count();
qDebug().nospace() << nb_ref << " references";

for(int ref_num = 1; ref_num <= nb_ref; ref_num++)
{
    Access::Reference* ref = app->References()->Item(ref_num);
    qDebug().nospace() << "Reference #" << ref_num << " : " << ref->Name() << " (" << ref->Guid() << ") : " << ref->FullPath();
}

app->CloseCurrentDatabase();
app->Quit();

Но при выполнении я получаю правильное количество ссылок (5 вв этом случае), но any вызов any свойства ссылки any приводит к той же ошибке:

Ошибка отладки!

Программа: c: \ Qt \ 5.11.1 \ msvc2015 \ bin \ Qt5Cored.dll

Модуль: 5.11.1
Файл: qaxbase.cpp
Строка: 3763

ASSERT: "id <0" в файле qaxbase.cpp, строка 3763 </p>

Кажется, что произошла ошибка при попытке доступа к свойству через QMetaObject.

Я также получаю предупреждение, сопровождаемоепо ошибке при каждом вызове объекта «Ссылки».Код работает (я получаю правильное количество ссылок), но, возможно, это связано:

Ошибка CoCreateInstance (Classe non enregistrée)
QAxBase :: setControl: запрошенный элемент управления {eb106214-9c89-11cf-a2b3-00a0c90542ff} не удалось создать экземпляр

Этот CLSID правильно зарегистрирован и ссылается на «Microsoft.Office.Interop.Access.ReferencesClass», как и ожидалось

Любой может помочь мне с этимутверждать?

1 Ответ

0 голосов
/ 10 октября 2018

Я попробовал точно такой же код, но с использованием QAxObject напрямую, а не через пространство имен C ++, сгенерированное с помощью dumpcpp:

QAxObject* app = new QAxObject("Access.Application", nullptr);
app->setProperty("Visible", true);

app->dynamicCall("OpenAccessProject(QString, bool)", "E:\\solulog_dev\\SoluTools\\app\\test\\sources\\utilitaires\\liste_aide.adp");

QAxObject* references = app->querySubObject("References");

int nb_ref = references->property("Count").toInt();
qDebug().nospace() << nb_ref << " références";

for(int ref_num = 1; ref_num <= nb_ref; ref_num++)
{
    QAxObject* reference = references->querySubObject("Item(QVariant)", ref_num);
    qDebug().nospace() << "Reference #" << ref_num << " : " << reference->property("Name").toString() << " (" << reference->property("Guid").toString() << ") : " << reference->property("FullPath").toString();
}

app->dynamicCall("CloseCurrentDatabase()");
app->dynamicCall("Quit()");
delete app;

И на этот раз все работает отлично.Не ошибка в плохой реализации, и я получаю значения для каждой ссылки ... Так что я предполагаю, что это ошибка dumpcpp.Должен ли я сообщить об этой проблеме в Qt?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...