首页 > 解决方案 > iisexpress.exe:仅在 Web 应用程序中调用本机代码 DLL 时访问冲突读取位置

问题描述

我正在从 asp.net 应用程序调用本机代码 dll(delphi)过程(无参数),并从 iisexpress.exe 获取该 [name].dll 的“访问冲突读取位置”异常。代码在 Windows 窗体应用程序中运行良好。

我已经检查了可能的 Windows Bitness 问题。dll是在win64下构建的。Asp Web 应用程序和 iis express 设置也从应用程序属性设置为 x64。排除了参数类型不兼容,因为该过程是无参数的并且它也没有返回任何内容。我还给了 'Everyone' 对 dll 的所有权限。调用相同 dll 的相同代码适用于 .net Windows 窗体应用程序。它也不适用于 Windows 服务器 IIS。

delphi dll本机代码:

procedure test() stdcall;
begin       
end;

exports 
  test;

Asp.net c#代码调用DLL:

[DllImport("name.dll", CharSet = CharSet.Unicode, 
           CallingConvention = CallingConvention.StdCall)]
public static extern void test();
protected void Page_Load(object sender, EventArgs e)
{           
     test();                       
}

Winforms.net c# 工作代码调用相同的 DLL:

[DllImport("name.dll", CharSet = CharSet.Unicode, 
           CallingConvention = CallingConvention.StdCall)]
public static extern void test();
private void button3_Click(object sender, EventArgs e)
{
     test();
}

我为 asp.net 应用程序遇到的 异常:在 iisexpress.exe 中的 0x000000000040D289(name.dll)处引发异常:0xC0000005:访问冲突读取位置 0x000002756568CCB0。

看起来它与 IIS 有关,因为它完美地在 Winforms 应用程序上运行,但我不确定是什么。

标签: c#asp.netdelphidll

解决方案


推荐阅读