2016-11-09 1694 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