2008-09-15 183 views
8

我們有一個用C#編寫的WinForms應用程序,它使用AxAcroPDFLib.AxAcroPDF組件加載和打印PDF文件。在Windows XP中一直沒有任何問題。我已將我的開發環境移至Vista 64位,現在應用程序將無法運行(在Vista 64上),除非我刪除AxAcroPDF組件。當應用程序運行時出現以下錯誤:AxAcroPDF - Vista64類未註冊錯誤

「System.Runtime.InteropServices.COMException: 未註冊的類(HRESULT的異常:0x80040154(REGDB_E_CLASSNOTREG))。」

我在Adobe論壇上被告知,錯誤的原因是他們沒有64位版本的AxAcroPDF ActiveX控件。

有沒有辦法解決這個問題?例如,我可以將32位ActiveX控件自己轉換爲64位控件嗎?

回答

14

您無法將Adobe的ActiveX控件自己轉換爲64位,但可以通過將平臺目標設置爲x86來強制應用程序以32位模式運行。

爲您的Visual Studio版本的說明,請參見Issues When Using Microsoft Visual Studio 2005

+0

下面的seaman.myopenid.com的答案是相同的,但提供了更多的細節 – daveywc 2008-09-17 22:00:24

0

使用DLL隔離部分1.44,每32位COM +應用程序的工作。更多詳情,請參閱: http://support.microsoft.com/kb/281335

使用此解決方案,您可以將32位COM +應用程序隔離爲單獨的32位進程。

64位應用程序搜索在安裝COM +對象:HKLM \ Software \ Classes下,但32位應用程序使用HKLM \ SOFTWARE \ WOW6432 \類

+0

DLL隔離與ActiveX控件一起工作嗎?我的印象是,你只能孤立地創建非可視化組件。如果可以的話,這可能是一個更好的解決方案,具體取決於調用控件與部署ha/32位減速的次數和性質 – rpetrich 2008-09-18 08:22:31

6

在.NET Framework 1.1總是靶向32位的CPU,而.NET Framework 2.0和可以根據由Visual Studio IDE的「平臺目標」選項更改的程序清單的processorArchitecture屬性來定位32位或64位。 使用默認選項'Any CPU',IL代碼根據平臺進行編譯,但是如果平臺是64位,當然對AxAcroPDF 32位組件的COM調用會失敗。 只需重新構建EXE即可定位到32位平臺。這適用於Vista 64位WOW64模擬器。

相關問題