DLLimport не может загрузить DLL - PullRequest
8 голосов
/ 16 июля 2011

Я использую неуправляемую dll в cpp, которую я вызываю из моего веб-проекта на C #.Он отлично работает на моем локальном хосте, но просто не работает на моем виртуальном хостинге, winhost.Это происходит, когда я пытаюсь использовать одну из функций в DLL.

Я получаю сообщение об ошибке:

"Невозможно загрузить DLL 'dllTest.dll': не удалось запустить приложение, так как его параллельная конфигурация невернаПожалуйста, просмотрите журнал событий приложения или используйте инструмент командной строки sxstrace.exe для получения более подробной информации. (Исключение из HRESULT: 0x800736B1) "," errors ": [{" name ":" DllNotFoundException "," message ":" Unableзагрузить DLL 'dllTest.dll': приложение не удалось запустить, потому что его параллельная конфигурация неверна. Пожалуйста, обратитесь к журналу событий приложения или используйте инструмент командной строки sxstrace.exe для более подробной информации. (Исключение из HRESULT: 0x800736B1) "}]}

Я подозреваю, что это проблема пути.DLL-файл, о котором идет речь, dllTest.dll находится в моей папке bin.Я не уверен, где он ищет DLL, но есть ли способ, которым я могу указать путь для поиска DLL.Я не могу найти способ указать относительный путь к DLL.

Я не думаю, что это проблема зависимостей, потому что мой dllTest.dll - это простой тест, который содержит только простую функцию добавления.

Или не могло быть других причин?

Спасибо за помощь.

1 Ответ

13 голосов
/ 16 июля 2011

Проблема в том, что вашей C ++ DLL требуется, чтобы библиотеки CRT были установлены для работы. Часть сообщения об ошибке, выделенная жирным шрифтом, дает подсказку:

Невозможно загрузить DLL 'dllTest.dll': Не удалось запустить приложение, поскольку его параллельная конфигурация неверна. Пожалуйста, просмотрите журнал событий приложения или используйте командную строку sxstrace. EXE-инструмент для более подробной информации.

Это объясняет, почему на вашем компьютере для разработки все в порядке - они уже установлены там, потому что они установлены с вашими инструментами разработки - и почему он не работает на рабочем сервере, на котором нет распространяемых CRT-файлов установлен.

Вам необходимо загрузить соответствующий распространяемый пакет для версии Visual Studio, с которой вы скомпилировали DLL. Например, если вы используете Visual Studio 2010, вы можете загрузить версию 10 распространяемого CRT здесь .

В качестве альтернативы, вы можете скомпилировать DLL со связанными библиотеками времени выполнения статически . Чтобы сделать это, измените свойства проекта, добавив вместо него /MD вместо *1018* (он находится в пользовательском интерфейсе в разделе «Свойства конфигурации» -> «C / C ++» -> «Генерация кода» -> «Время выполнения»). Библиотека ").

...