Невозможно вызвать DLL из ASP.NET - PullRequest
4 голосов
/ 15 февраля 2012

Привет, у меня есть C Dll, который будет взаимодействовать с приложением cobol.мы хотим отправить данные в cobol через Интернет.

, поэтому я создал C # DLL, которая будет вызывать C DLL.он работает нормально, когда я делаю consoleapp, но когда я пытаюсь вызвать ту же DLL из ASP.NET, он выдает сообщение об ошибке

Я не понимаю эту ошибку

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

Есть некоторые другиесообщения, касающиеся этого, но они не соответствуют моему контексту, я думаю, что я отсутствует permissions для asp.net

это объявление в моем c # dll для вызова c dll

[DllImport(@"C:\CCExpert\haz450cp.dll", EntryPoint = "Methodname", CallingConvention = CallingConvention.Cdecl)]
    unsafe public static extern void Methodname(ref p1, ref p2);

Редактировать:

Привет! Я изменил настройки в соответствии с вашими предложениями, но теперь я получаю новую ошибку

Microsoft Visual Studio C Runtime Library has detected a fatal error in w3wp.exe

Ответы [ 2 ]

7 голосов
/ 15 февраля 2012

Если у вас есть C .dll, он будет 32-битным или 64-битным. Вы должны убедиться, что ваш сайт работает на правильной платформе для этого (то есть ваш сайт работает как соответствующий 32/64-битный сайт.)

В IIS 7 можно настроить разрядность пула приложений, щелкнув правой кнопкой мыши пул приложений и выбрав Advanced Settings. Существует настройка под названием Enable 32-bit applications, вам нужно установить ее на True для 32-битных сайтов и False для 64-битных сайтов.

Вы можете использовать Dependency Walker , чтобы увидеть, является ли DLL 32-битной или 64-битной: используйте View full paths (выглядит как C:\ на панели инструментов) и если зависимости вашего .dll и:

  • Если у вас 32-битная ОС, ваш .dll может быть 64-битным. Вы не сможете загрузить его.
  • Если у вас 64-битная ОС:
    • Если зависимости находятся под System32, это 64-битный .dll
    • Если зависимости находятся под SysWOW64, это 32-битный .dll

Здесь рассказывается, как установить пул приложений. Чтобы установить пул приложений, вы можете проверить эту ссылку .

Убедитесь, что вы используете Advanced Settings при открытии свойств пула приложений, а не основных настроек. Кроме того, эти параметры недоступны при вызове свойств для вашего сайта - они доступны только для пула приложений.

2 голосов
/ 15 февраля 2012

Наиболее вероятной причиной этой проблемы является то, что вы пытаетесь загрузить 32-битную DLL в 64-битный процесс (или наоборот).Чтобы проверить или исключить это, проверьте и посмотрите, работает ли Asp.Net в 64-битном режиме, и если это так, вам нужна 64-битная версия C DLL

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...