2010-05-27 70 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