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

Yikes, кто писал, что запись в вики не понимает beans о том, как работает 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 
Смежные вопросы