DLL не найдена: ссылка на зависимые библиотеки DLL - PullRequest
1 голос
/ 06 сентября 2011

Я пытаюсь реализовать C ++ DLL (моего собственного создания), которая использует Intel Performance Primitives в приложении форм C #.Я получаю «DLL Not Found Exception», когда пытаюсь запустить программу.Одна из возможных причин, приведенных в других публикациях на этом сайте, заключается в том, что существуют зависимые библиотеки DLL, на которые нужно ссылаться, и фактически после загрузки DpendencyWalker я обнаружил, что моя библиотека DLL использует «IPPS-7.0.DLL».

Моя проблемачто мне неясно, как ссылаться на эти зависимые библиотеки DLL.Я добавил папку, содержащую IPPS-7.0.DLL, к ссылочным путям, а также добавил ссылки на сборки IntelCppOptPkg и IntelLibOptPgk, но это не решило проблему.

Итак, я прав вверить, что это проблема?И если да, то как можно ссылаться на зависимую DLL в управляемом коде?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Вы не ссылаетесь на них, они не являются сборками .NET. Вам просто нужно убедиться, что библиотеки DLL скопированы в ваш каталог сборки. Самый простой способ сделать это с помощью Project + Add Existing Item - выбрать DLL из того места, где она была скопирована. Затем выберите добавленный файл и в окне «Свойства» установите «Построить действие = Содержимое», «Копировать в выходной каталог» = «Копировать, если новее». Проверка библиотеки DLL в системе контроля версий, как правило, хорошая идея.

1 голос
/ 06 сентября 2011

Управляемый код не может ссылаться на неуправляемые dll так же, как он ссылается на управляемые сборки.Управляемые ссылки фактически изменяют метаданные вашей сборки:

Компилятор записывает статические ссылки в метаданные манифеста сборки во время сборки.... Предпочтительным способом ссылки на сборку является использование полной ссылки, включая имя сборки, версию, культуру и маркер открытого ключа (если таковой существует).

Собственные dll просто не делаютЭти метаданные .NET связаны с ними.Их необходимо скопировать вручную на этапе Post Build или во время развертывания.Существует обходной путь , но я не думаю, что он будет работать, если ваше управляемое приложение не зависит от платформы (любой ЦП) и у вас есть версии неуправляемых библиотек x86 и x64.

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