在IIS7中从ASP.NET调用非托管代码

时间:2010-09-21 19:01:18

标签: c# asp.net c++ iis-7 unmanaged

我在ASP.NET中调用一个用C ++编写的DLL。 当它运行到IIS 7时,池(w3wp.exe)崩溃并且“及时调试窗口”打开。

我做了很多跟踪,发现在调用任何具有“out string”参数的函数(在非托管DLL中)(或返回字符串值)时会发生崩溃。

我在网上看到的人比他们的DLL(C,Delphi,VB6)有这个问题。但没有答案。所以我打电话给专家!

如何调用这些函数以便IIS 7无错误地处理它?

cas sakal

2 个答案:

答案 0 :(得分:1)

您应该使用StringBuilder作为互操作字符串输出参数:

  [MarshalAs(UnmanagedType.LPStr)] StringBuilder myString

答案 1 :(得分:0)

可能无法实现。 COM提供接口规范,但不保证调用者能够正确使用接口。除非COM对象公开COM子系统可自动编组的方法(例如:自动化兼容),否则您可能无法使用它们。编写一个C ++ COM对象很容易,这个对象不能在进程外直接访问,也不能用C ++以外的任何语言编写。

您可以编写一些自定义封送处理代码以使其正常工作,但我不认为它可以直接使用。如果类型足够简单/直接,可能会有一些内置的编组属性使其工作;但是,我在这个领域并不是很了解,所以希望其他人可以提供帮助。