C ++ - CLI: может ли Wrapper указать, где искать библиотеку, в которую он упакован? - PullRequest
1 голос
/ 29 марта 2019

Используя CLI, я обернул библиотеку классов C # с C ++ DLL, чтобы к C # можно было обращаться из неуправляемого кода.Я включил библиотеку классов C # в качестве ссылки в проект VisualStudio для C ++ DLL, и я могу запустить небольшую тестовую программу, которая вызывает методы из моих классов C # через C ++ DLL.Тем не менее, тест завершается неудачно со следующим сообщением, если библиотека классов C # не находится в том же каталоге, что и файл .exe, который вызывает оболочку.

Необработанное исключение: System.IO.FileNotFoundException: не удалосьзагрузить файл или сборку 'MiniModel, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей.Системе не удается найти указанный файл.

в MiniModelWrapper.MM_Interface.initialize (SByte * A_0)

при инициализации (SByte * fn)

Мой вопрос:

Есть ли настройка VS, которую я могу использовать, или фрагмент кода, который я могу ввести в оболочку C ++, которая позволит оболочке определять местоположение библиотеки упакованных классов для программы, которая вызывает оболочку?Возможно ли сделать обернутые библиотеки доступными для поиска по системному пути?

Справочная информация:

Я работаю с программой "framework", которая вызывает библиотеки из других программ, используя API, определенный какфункции, объявленные в заголовочном файле C / C ++.По сути, мы пытаемся сделать сложную числовую модель из набора более простых подмоделей, координируемых рамочной программой.

Некоторые из подмоделей находятся в управляемом коде, и мне нужно поместить оберткивокруг них, чтобы рамки могли их назвать.Я нашел справку здесь и создал тест на очень простом примере - я называю его «MiniModel» - который реализует части API в объектах C #, а затем делает их доступными для программы-тестера черезDLL "MiniModelWrapper".

Проблема, с которой я столкнулся, похожа на вопрос 21742777 , и в качестве рекомендованного решения я использовал Process Monitor, чтобы получить некоторое представление о том, где программа искала, но не находила,моя библиотека.Я увидел, что программа просмотрела несколько каталогов, перечисленных в пути, чтобы найти мою библиотеку-оболочку, но только в каталоге, где находится исполняемый файл теста, и в (несуществующем) подкаталоге MiniModel для библиотеки классов C # в оболочке.

Практически нецелесообразно помещать все библиотеки, которые вызывает фреймворк, в один каталог.Наличие упаковщиков, указывающих на расположение библиотек, которые они оборачивают, кажется практичным решением.Могу я это сделать?

...