AxAcroPDF - класс Vista64, ошибка не зарегистрирована - PullRequest
8 голосов
/ 16 сентября 2008

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

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

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

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

Ответы [ 3 ]

14 голосов
/ 16 сентября 2008

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

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

6 голосов
/ 17 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

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

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

...