【问题标题】:Calling unmanaged code from ASP.NET in IIS7在 IIS7 中从 ASP.NET 调用非托管代码
【发布时间】:2011-04-15 09:07:11
【问题描述】:

我将 ASP.NET 中的 DLL 称为用 C++ 编写的 DLL。 在 IIS 7 中运行时,池 (w3wp.exe) 崩溃并打开“即时调试窗口”。

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

我在网上看到很多人的 DLL(C、Delphi、VB6)都有这个问题。但没有答案。所以我叫专家!

如何调用这些函数以便 IIS 7 正确处理它?

卡萨卡尔

【问题讨论】:

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


【解决方案1】:

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

  [MarshalAs(UnmanagedType.LPStr)] StringBuilder myString

【讨论】:

    【解决方案2】:

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

    您也许可以编写一些自定义编组代码来使其工作,但我不认为它会直接工作。如果类型足够简单/直接,则可能有一些内置的 marshal 属性可以使其工作;不过,我在这方面的知识不多,所以希望其他人能提供帮助。

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 2015-02-24
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2011-02-05
      • 2011-01-31
      相关资源
      最近更新 更多