C # — вызов C ++ DLL из ASP.NET 4

Я пытаюсь вызвать C ++ DLL из веб-приложения ASP.NET 4.0, но продолжаю получать Ошибка импорта DLL — невозможно загрузить библиотеку «Имя библиотеки».

Я читал много блогов, в которых разработчики испытывают одну и ту же проблему, и то, что, по-видимому, работает для большинства людей, — это добавление пути к неуправляемым DLL-библиотекам. PATH Переменная среды

Я сделал то же самое на сервере и дважды, tripple проверил, правильно ли я набрал путь и что библиотеки C ++ находятся в этой папке, но при просмотре приложения в браузере я все еще получаю ту же ошибку. поместил логирование в коде, и оно определенно происходит из той части кода, которая вызывает неуправляемую DLL.

Вот некоторая информация о моей среде:

  1. Windows Server 2003
  2. IIS 6.0
  3. .NET Framework 4.0
  4. ASP.NET MVC 4.0
  5. C #

На компьютере разработчика это работает, если я копирую неуправляемые библиотеки DLL в C: \ Program Files \ IIS Express

Попытка копирования библиотек C ++ DLL в папку bin, но, насколько я понимаю, ASP.NET копирует библиотеки DLL из папки bin в inetpub \ wwwroot \ sitename \ bin в динамическое расположение при выполнении кода, но этот процесс исключает неуправляемые библиотеки DLL. Любой совет, что еще я могу попробовать?

РЕДАКТИРОВАТЬ:

С точки зрения кода он точно такой же, как и любой другой код взаимодействия, у меня есть класс-оболочка, в котором я использую DllImport для определения всех необходимых вызовов функций, и в своем коде я создаю новый экземпляр обертки и вызываю требуемую функцию. Я упоминал, что это прекрасно работает на компьютере разработчика, если DLL-библиотеки C ++ находятся в папке IISExpress, но при развертывании на сервере выдает вышеупомянутую ошибку:

[DllImport("My3rdparty.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int myfunction(int handle, int* response, int timer);

4

Решение

Таким образом, после нескольких недель борьбы я начал работать. Интеграция, которую я реализовывал, была для обработки кредитных карт. Наряду с DLL-библиотеками C ++ у них также есть скомпилированный файл конфигурации с именем system.dna, и я подозреваю, что когда вы добавляете папку, содержащую библиотеки взаимодействия, в переменные среды PATH, она не получает файл system.dna.

В качестве обходного пути я создал службу WCF, которая установлена ​​на сервере в качестве службы Windows, и я поместил логику для осуществления платежей в эту службу, и веб-приложение просто общается со службой. Я надеюсь, что это помогает другим разработчикам, которые сталкиваются с та же проблема

0

Другие решения


По вопросам рекламы [email protected]