Lev37 Ответов: 0

Iisexpress.exe: нарушение прав доступа для чтения месте при вызове нативного кода в DLL веб-приложения только


Я вызываю процедуру dll нативного кода (delphi) (без параметров) из asp.net приложение и получение исключения "нарушение доступа к месту чтения" из iisexpress.exe для этого [имя].dll. Код прекрасно работает в приложении Windows forms.


собственный код 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 приложение: Исключение, вызванное в 0x000000000040D289 (name.dll) в iisexpress.exe: 0xC0000005: нарушение доступа место чтения 0x000002756568CCB0.

Похоже, что это имеет какое-то отношение к IIS, так как он отлично работает над приложением Winforms, но я не уверен, что именно.

Что я уже пробовал:

Я проверил возможную проблему битности windows. Библиотека Dll построена под управлением win64. ASP веб-приложения и настройки IIS Express можно также установить на x64 из свойств приложения. Несовместимость типов параметров исключается, поскольку процедура не имеет параметров и также ничего не возвращает. Я также дал "всем" все разрешения на библиотеку dll. Один и тот же код вызова одной библиотеке произведения в .объем приложений на основе форм Windows. Он также не работает на Windows server IIS.

Richard MacCutchan

Вы уверены, что на сервере установлены все соответствующие библиотеки поддержки системы Delphi?

Kornfeld Eliyahu Peter

Пользовательский контекст, в котором выполняется веб-приложение, вероятно, отличается от контекста приложения WinForm...
Может быть, вы пытаетесь получить доступ к DLL вне папки вашего веб-приложения?
Попробуйте положить его в папку bin, которая у вас есть...

0 Ответов