2008-09-15 2 views
8

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

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

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

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

ответ

14

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

Инструкции для вашей версии Visual Studio, смотрите раздел 1.44 из Issues When Using Microsoft Visual Studio 2005

+0

ответ seaman.myopenid.com ниже тот же, но дает немного подробнее – daveywc 2008-09-17 22:00:24

0

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

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

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

+0

Работает ли изоляция DLL с элементами управления ActiveX? У меня создалось впечатление, что вы можете создавать не визуальные компоненты отдельно. Если это возможно, это может быть лучшим решением в зависимости от количества и характера вызовов управления или развертывания hastle/32bit slowdown – rpetrich 2008-09-18 08:22:31

6

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