2010-05-27 44 views
0

我正在將ASP.NET Web項目從IIS 6移動到IIS 7宿主環境。 除了我對COM對象的調用外,一切似乎都運行正常。在IIS 7中使用COM對象

我可以完美地實例化一個COM類型的對象,但是當我調用它的一個方法時,IIS崩潰。事件日誌報告錯誤代碼「0xc0000374」,表示堆損壞。

當我在Visual Studio開發服務器中運行應用程序時,一切順利,COM對象代碼得到執行而沒有任何錯誤。當應用程序託管在IIS 6機器上時也是如此。

我已經通過IIS 7的所有設置看了看,沒有發現任何配置爲COM對象,如安全或...

我一直在爲此而努力了一段時間,我的想法。 有沒有人在IIS 7上部署COM對象有任何經驗?

您的幫助將非常感激!

+0

IIS進程/應用程序池是否可以訪問實際COM DLL所在的目錄? – PatrickSteele 2010-05-27 15:19:22

+0

是的,我剛剛加倍檢查,並試圖給應用程序池用戶該文件夾的所有權利。但沒有變化。 – w00ter 2010-05-28 07:52:04

+0

奇怪的是,這個COM對象負責生成一個圖像文件。這個IIS崩潰之前生成一個文件。這可能是一個重要的細節... – w00ter 2010-05-28 09:00:35

回答

0

唷......我找到了解決方案!

我正在使用的Delphi COM對象返回一個字符串,該字符串保存生成的圖像文件的路徑。 由於Delphi代碼給出了該字符串作爲結果,或返回值爲C#開發人員。 爲我的C#代碼無法訪問分配給該變量的內存,導致堆損壞或錯誤代碼「0xc0000374」。

我通過重寫Delphi代碼來接受文件路徑的「ref」變量來解決此問題,因此它將寫入與我在C#中創建的字符串變量相同的指針。

幸運的是我的我可以訪問COM對象源代碼

我從下面的文章靈感:

http://blogs.msdn.com/b/asiatech/archive/2009/12/24/net-application-may-crash-on-windows-2008-when-calling-function-from-native-c-dll.aspx

我希望這可以幫助其他人未來。

0

根據我的記憶,通過使用regsvr32甚至更好地在控制面板>管理工具>組件服務中添加這些對象,COM對象需要在服務器上註冊。

+0

當然,是COM對象註冊regsvr32。否則,在Visual Studio開發服務器內運行也不會有效。 – w00ter 2010-05-28 07:36:19