ASP.NET DllImport导致应用程序退出

|| 我非常怀疑我的问题是由于某些安全问题所致,但是如果有误,这里是完整的说明。 我有一个最初用C(不是C ++)编写的DLL。我正在使用DllImport调用此库中的方法。声明看起来像这样:
[DllImport(@\"MyAntiquatedLibrary.dll\")
[SecurityPermission(SecurityAction.Assert, Unrestricted = true)]
internal static extern void GetConnectionString(string port, string server, string instance, [Out] StringBuilder output);
头文件中的C声明如下所示:
void GetConnectionString(const char far *Portname, const char far *ServerName const char far *InstanceName, char far *retConnectionName);
因此,我在Visual Studio的WebApplication项目中创建了一个示例页面,其背后的代码如下所示:
protected void Page_Load(object sender, EventArgs e)
{
  try
  {
    var connectionString = new StringBuilder();
    GetConnectionString(null, \"myHost\", \"myInstance\", connectionString);
    MyLabel.Text = connectionString.ToString();
  }
  catch(Exception ex)
  {
    MyLabel.Text = string.Format(\"Something went wrong: {0}\", ex.Message);
  }
}
当我调试程序并跳过GetConnectionString()方法调用时,我得到了:
AccessViolationException was unhandled.
Attempted to read or write protected memory.  This is often an indication that other memory is corrupt.
我从WebApplication项目中的Web服务或网页对interop DLL进行的任何调用都遇到相同的问题。在测试时,相同的调用顺序在我编写的ConsoleApplication中可以正常工作。 从WindowsConsole应用程序调用时,相同的代码可以正常工作。该示例从实际用法中进行了简化,但是结果是相同的。在实际的解决方案中,我有一个项目负责管理与C-API的交互,这就是我的Web服务正在调用的项目,但是我已经运行了上面的示例并获得了我所解释的行为。     
已邀请:
        如果IIS服务器在64位操作系统上运行,则应显式地使用目标CPU = X86构建项目,否则它将被视为AnyCPU,并且jit可能会为其生成64位本机代码。完成此操作后,您可以在IIS中启用32位应用程序,并且您的项目应该可以运行。 其他要检查的是您的asp.net应用程序实际上找到了您的dll。     
        问题最终是我没有正确初始化C-API。有一个函数调用会初始化整个API,而当我在UnitTests中执行此操作时,却忘记了在网络服务中执行此操作。 谢谢大家的帮助,我觉得我已经学到了很多有关ASP.NET安全模型和.NET信任实现的知识。     

要回复问题请先登录注册