C ++ / CLI Управляемая DLL, скомпилированная для .lib, не загружается, имеет зависимость .dll.(VS2010) - PullRequest
3 голосов
/ 22 марта 2012

В Visual Studio 2010 я написал оболочку управляемого класса C ++ / CLI для внешней библиотеки, предоставленной в виде файла .lib, давайте назовем ее ExternalLibrary.lib. .Lib включен в качестве зависимости проекта, и при компиляции не выдается никаких предупреждений или ошибок.

Когда я пытаюсь использовать этот проект-обертку, включив его в качестве зависимости проекта C #, я получаю следующую ошибку при работе в режиме отладки (проект молча не удается запустить без отладки):

FileNotFoundException was unhandled
Could not load file or assembly 'WrapperProject.dll' or one of its dependencies.
The specified module could not be found

Я проверил, что WrapperProject.dll находится в папке отладки проекта C #, поэтому я решил проверить его зависимости с помощью Dependency Walker (http://dependencywalker.com/) Первая зависимость в списке была "ExternalLibrary.dll". Я думаю, что это проблема в том, что «ExternalLibrary.dll» никогда не существовало, только «ExternalLibrary.lib». Как мне сказать Visual Studio, чтобы она не требовала несуществующей DLL, и вместо этого включить файл .lib?

Он уже выдает ошибку, если я удаляю .lib из пути компоновщика, поэтому он ищет и находит файл; Я не уверен, почему в конце это добавило бы зависимость от несуществующего .dll.

Спасибо

1 Ответ

5 голосов
/ 22 марта 2012

Вы не можете - DLL всегда будет требоваться.Файл .LIB представляет собой библиотеку импорта для этой библиотеки DLL.

Связывание с файлом .lib просто говорит компилятору, как загрузить правильную информацию из соответствующего файла .DLL (ExternalLibrary.dll).во время выполнения..DLL по-прежнему требуется, и его необходимо будет развернуть вместе с вашим приложением.

...