AxAcroPDF - Erro de classe Vista64 não registrada
Pergunta
Temos um aplicativo WinForms escrito em C# que usa o componente AxAcroPDFLib.AxAcroPDF para carregar e imprimir um arquivo PDF.Tem funcionado sem problemas no Windows XP.Mudei meu ambiente de desenvolvimento para o Vista 64 bits e agora o aplicativo não será executado (no Vista 64) a menos que eu remova o componente AxAcroPDF.Recebo o seguinte erro quando o aplicativo é executado:
"System.Runtime.InteropServices.COMException:Classe não registrada (Exceção de HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))."
Fui informado nos Fóruns da Adobe que o motivo do erro é que eles não possuem uma versão de 64 bits do controle ActiveX AxAcroPDF.
Existe alguma maneira de contornar esse problema?Por exemplo, posso converter o controle ActiveX de 32 bits em um controle de 64 bits?
Solução
Você não pode converter o controle ActiveX da Adobe para 64 bits, mas pode forçar seu aplicativo a ser executado no modo de 32 bits definindo o destino da plataforma como x86.
Para obter instruções para sua versão do Visual Studio, consulte a seção 1.44 do Problemas ao usar o Microsoft Visual Studio 2005
Outras dicas
O .Net framework 1.1 sempre tem como alvo CPUs de 32 bits, enquanto o .Net framework 2.0 e superior pode ter como alvo 32 bits ou 64 bits de acordo com a propriedade processadorArchitecture do manifesto do programa alterada pela opção 'Platform Target' do IDE do Visual Studio.Com a opção padrão 'Any CPU', o código IL é compilado de acordo com a plataforma, mas é claro que a chamada COM para o componente AxAcroPDF de 32 bits falhará se a plataforma for de 64 bits.Basta reconstruir o EXE para atingir apenas a plataforma de 32 bits.Isso funciona bem com o emulador WOW64 no Vista 64 bits.
Use isolamento de DLL, funciona com todos os aplicativos COM+ de 32 bits.Veja mais em:http://support.microsoft.com/kb/281335
Com esta solução você pode isolar seu aplicativo COM+ de 32 bits em um processo separado de 32 bits.
Aplicativos de 64 bits pesquisam objetos COM+ instalados em:HKLM\Software\Classes, mas aplicativos de 32 bits usam HKLM\Software\WOW6432\Classes