2011-10-05 36 views
0

我的代碼在32位系統上正常工作。我只是簡單地引用讀取/寫入xml的COM組件。所以,當我收到下面的錯誤時,我嘗試在'X86'中編譯,然後在64位系統上運行。System.OutOfMemoryException使用32位COM組件編譯代碼並在64位系統上使用時

以下異常:System.OutOfMemoryException的:創建COM組件的CLSID爲{59D5FDED-B01B-47F4-BBBC-56941A2F4873}從IClassFactory的失敗,原因是以下錯誤的實例:8007000E。

+0

你可以發佈你使用的界面嗎?有一個很好的機會,它使用'int'或其他數據類型的指針大小錯誤的地方。 – Polynomial

+0

另外,當有一個專用於處理XML的完整.NET名稱空間時,爲什麼使用COM組件編寫XML? – Polynomial

+0

這是一個已經存在了10年以上的主要服務器應用程序。它需要部署在64位服務器上。我現在使用.NET命名空間來滿足我所有的XML需求。 – jmac

回答

0

隨機建議:

  • 連接調試本機,看看是否有有趣的本土例外。
  • 儘量讓你的exe「不需要大內存空間」。
  • 驗證應用程序是否加載爲32位。
  • 嘗試使用本機代碼創建組件,以驗證它是否已正確安裝在系統上。

注意:如果您的COM組件使用MSXML處理XML,則將其加載到託管應用程序中不受支持,原因是內存管理之間存在不可兼容性。這不太可能是你所看到的原因,但更多的是一般性的參考。

+0

必須同意這種方法。在人們不得不考慮64位問題之前,任何COM組件都有可能被寫入。他們所要做的就是假設一個指針的寬度是4個字節,並且會在64位機器上中斷。這可能是離開COM組件並使用純粹管理解決方案的好時機。 – Polynomial

相關問題