2016-11-09 1701 views
0

我有什么,我从上qt wiki阅读下面的代码:的Qt的ActiveX的CoCreateInstance失败(没有注册类)ADOBE READER

auto pdfObject = new QAxObject("AxAcroPDFLib.AxAcroPDF"); 
qDebug() << pdfObject->dynamicCall("LoadFile(const QString)", "test.pdf"); 
qDebug() << pdfObject->dynamicCall("Print()"); 

但是当我运行它,我得到的消息:

CoCreateInstance failure (Class not registered) 
QAxBase::setControl: requested control AxAcroPDFLib.AxAcroPDF could not be instantiated 

我搜索了需要的DLL文件,并在C:\Program Files (x86)\Common Files\Adobe\Acrobat\ActiveX中找到,并安装了Adobe Acrobat Reader DC。我能做些什么使这个工作?

+1

是的,谁写道,wiki条目不了解COM的工作方式。 .NET Regasm.exe实用程序是一个非常危险的枪手。当他列出Linux和Mac作为可能的平台时,您也可以知道安全开关已关闭。正确的ProgId是“AcroPDF.PDF”。避免依赖Acrobat,而不是您想要支持自己的程序。很多很多的PDF查看器。 –

+0

可能的原因是ActiveX是32位的,而你的应用程序是64位的,所以它无法找到ActiveX – demonplus

回答

0

由于缺少注册,可能找不到COM对象。确保ActiveX DLL已注册。使用regsvr32。您可能需要管理员权限才能运行它。命令行是:

regsvr32 AcroPDF.dll 
regsvr32 AcroPDF.dll