C# 在IIS7中从ASP.NET调用非托管代码 我在ASP.NET中调用一个DLL,一个用C++编写的DLL。 在IIS7中运行时,池(w3wp.exe)崩溃,“实时调试窗口”打开

C# 在IIS7中从ASP.NET调用非托管代码 我在ASP.NET中调用一个DLL,一个用C++编写的DLL。 在IIS7中运行时,池(w3wp.exe)崩溃,“实时调试窗口”打开,c#,asp.net,c++,iis-7,unmanaged,C#,Asp.net,C++,Iis 7,Unmanaged,我做了很多跟踪,发现在调用任何具有“out string”参数(或返回字符串值)的函数(在非托管DLL中)时会发生崩溃 我在网上看到很多人的DLL(C、Delphi、VB6)都有这个问题。但是没有回答。所以我叫专家 如何调用这些函数,以便IIS 7能够无误地处理这些函数 cas sakal这可能是不可能的。COM提供接口规范,但不能保证调用方能够正确使用接口。除非COM对象公开COM子系统可自动封送的方法(例如:automation compatible),否则您可能无法使用它们。编写C++ C

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

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

如何调用这些函数,以便IIS 7能够无误地处理这些函数


cas sakal

这可能是不可能的。COM提供接口规范,但不能保证调用方能够正确使用接口。除非COM对象公开COM子系统可自动封送的方法(例如:automation compatible),否则您可能无法使用它们。编写C++ COM对象很容易,它不能直接从进程中访问,或者用C++以外的任何语言。
您可以编写一些自定义封送处理代码使其工作,但我不认为它会直接工作。如果类型足够简单/直接,则可能有一些内置封送属性使其工作;不过,我在这方面的知识不多,所以希望其他人能提供帮助。

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

  [MarshalAs(UnmanagedType.LPStr)] StringBuilder myString
答:基于此:这是一个非常棘手的问题。把它说出来。问题是,如果ActiveX控件未嵌入调用进程中(从IIS中运行的ASP调用时不是这样),它将不会初始化,因此需要进行黑客攻击。