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服务正在调用的项目,但是我已经运行了上面的示例并获得了我所解释的行为。
没有找到相关结果
已邀请:
2 个回复
容淑阔九
死簇