AxAcroPDF — класс Vista64 не зарегистрирован, ошибка

У нас есть приложение WinForms, написанное на C#, которое использует компонент AxAcroPDFLib.AxAcroPDF для загрузки и печати файла PDF. В Windows XP работает без проблем. Я переместил свою среду разработки на 64-разрядную версию Vista, и теперь приложение не будет работать (на Vista 64), пока я не удалю компонент AxAcroPDF. Я получаю следующую ошибку при запуске приложения:

«System.Runtime.InteropServices.COMException: класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).»

На форумах Adobe мне сообщили, что причина ошибки в том, что у них нет 64-разрядной версии элемента управления AxAcroPDF ActiveX.

Есть ли способ обойти эту проблему? Например, могу ли я самостоятельно преобразовать 32-разрядный элемент управления ActiveX в 64-разрядный?


person daveywc    schedule 15.09.2008    source источник


Ответы (3)


Вы не можете самостоятельно преобразовать элемент управления Adobe ActiveX в 64-битный, но вы можете заставить свое приложение работать в 32-битном режиме, установив целевую платформу на x86.

Инструкции для вашей версии Visual Studio см. в разделе 1.44 документа Проблемы при использовании Microsoft Visual Studio. 2005 г.

person rpetrich    schedule 16.09.2008
comment
ответ seaman.myopenid.com ниже тот же, но содержит немного больше деталей - person daveywc; 18.09.2008

Платформа .Net 1.1 всегда ориентирована на 32-разрядные процессоры, в то время как платформа .Net 2.0 и более поздние версии могут ориентироваться на 32-разрядные или 64-разрядные процессоры в соответствии со свойством CPUArchitecture манифеста программы, измененным параметром «Цель платформы» среды Visual Studio IDE. С параметром по умолчанию «Любой процессор» код IL компилируется в соответствии с платформой, но, конечно, COM-вызов 32-битного компонента AxAcroPDF завершается ошибкой, если платформа 64-битная. Просто пересоберите EXE только для целевой 32-битной платформы. Это прекрасно работает с эмулятором WOW64 в 64-битной версии Vista.

person Community    schedule 17.09.2008

Используйте изоляцию DLL, работает с каждым 32-битным приложением COM+. Дополнительные сведения см. по адресу: http://support.microsoft.com/kb/281335.

С помощью этого решения вы можете изолировать 32-разрядное приложение COM+ в отдельный 32-разрядный процесс.

64-разрядные приложения ищут установленные объекты COM+ по адресу: HKLM\Software\Classes, а 32-разрядные приложения используют HKLM\Software\WOW6432\Classes.

person Community    schedule 16.09.2008
comment
Работает ли изоляция DLL с элементами управления ActiveX? У меня сложилось впечатление, что невизуальные компоненты можно создавать только изолированно. Если вы можете, это может быть лучшим решением в зависимости от количества и характера вызовов элемента управления по сравнению с хлопотами развертывания/32-битным замедлением. - person rpetrich; 18.09.2008