2009-02-02 2 views
5

Я создал dll с помощью управляемого C++. Теперь я пытаюсь использовать его с C#. Я добавил объект к ссылкам проекта. Обозреватель объектов показывает объект в DLL, путь к DLL в браузере объектов соответствует фактическому пути.Использование управляемой C++ dll из C#

Однако, когда я запускаю программу C# он жалуется:

Необработанное исключение: System.IO.FileNotFoundException: Указанный модуль может не найден. (Исключение из HRESULT: 0x8007007E)

Любая идея, что еще нужно сделать?

Спасибо.

+0

Можем ли мы увидеть здесь какой-нибудь код? –

ответ

6

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

+0

Правда, одна из используемых библиотек не была на пути. Благодарю. – 2009-02-02 16:14:30

0

Имеет ли ваша управляемая сборка C++ другие зависимости, в том числе неуправляемые DLL? Вы увидите эту ошибку во время выполнения, если ваша ссылка на сборку не загрузит зависимость.

0

Выполняется ли запуск приложения на компьютере без установки VS?

Я только спрашиваю, потому что я столкнулся с аналогичной проблемой здесь: Mixed Mode Library and CRT Dependencies - HELP

если вы прокрутите вниз до моего ответа вы можете увидеть, что я сделал, что помог мне.

0

Убедитесь, что сборка C++ присутствует в той же папке, что и ваша программа C#. Он должен быть скопирован автоматически, если для свойства «Скопировать местное» установлено значение true (ссылка на dll C++ в вашем приложении C#).

Если существует dll C++, наиболее вероятная проблема заключается в том, что dll C++ зависит от другой не управляемой dll, которая не может быть найдена (т.е. C# не будет копировать их в папку приложения, поскольку она не знает об неуправляемых ссылках). Вы можете использовать DependencyWalker на dll C++ для проверки отсутствующих зависимостей.

Еще одна возможная проблема может быть связана с вашими DLL-средами MSVC. см., если DependencyWalker жалуется на отсутствие файлов MSVCR * .dll, MSVCP * .dll и т. д. ....