我使用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
线:3763ASSERT:文件qaxbase.cpp中的“ id <0”,行3763
尝试通过QMetaObject访问属性时似乎失败。
每次调用“ References”对象时,我还会收到警告和错误提示。该代码有效(我得到了正确数量的引用),但可能与之相关:
CoCreateInstance失败(非注册类)
QAxBase :: setControl:无法实例化请求的控件{eb106214-9c89-11cf-a2b3-00a0c90542ff}
此CLSID已正确注册,并按预期引用了“ Microsoft.Office.Interop.Access.ReferencesClass”
有人可以帮我这个断言吗?
答案 0 :(得分:0)
我尝试了完全相同的代码,但直接使用QAxObject,而不是通过使用dumpcpp生成的C ++名称空间:
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吗?