У меня есть проект cll dll (my_cs_dll.dll
), который определяет статический класс со статической функцией-членом.Как вы называете управляемую (C#) функцию из C++?
namespace Foo
{
public static class Bar
{
public static double GetNumber() { return 1.0; }
}
}
У меня также есть проект dll C++, который использует/clr.
#using <my_cs_dll.dll>
double get_number_from_cs() { return Foo::Bar::GetNumber(); }
Я добавил ссылку на 'my_cs_dll.dll'
в C++ проект Общих свойств раздела ссылки (копировать локальный/зависимости от копирования являются True).
И еще я добавил путь к 'my_cs_dll.dll'
в проект конфигурации C++. Свойства конфигурации C/C++ Общие разделы «Разрешить # с использованием ссылок».
Все строит без ошибок, однако во время выполнения я продолжаю получать исключение «System.IO.FileNotFound» из системы, заявляя, что не может найти сборку my_cs_dll.dll
.
Оба Dll, безусловно, присутствуют в том же каталоге, с которого я работаю.
Я пробовал все виды вариаций настроек, указанных выше, и читать все, что смог найти на сведущих/неуправляемый Interop, но я не могу показаться, чтобы получить мой мозг вокруг, что это неправильно ...
I используя VS2008 & .NET 3.5
Привет Matt, «он должен находиться в каталоге (или подкаталог), где находится исполняемый, в отличие от расположения библиотеки DLL, которые используют его» В DLL файлов вложены несколько подкаталогов под ех , Перемещение управляемой DLL в ту же директорию, что и исполняемый, устраняет проблему. спасибо !! – mark
Хорошо, отлично. У меня создалось впечатление, что до тех пор, пока dll находится в подкаталоге исполняемого файла, независимо от того, насколько глубока, сборка будет решена. Но, как я уже сказал, прошло некоторое время с тех пор, как я посмотрел на это. –
Я использовал аналогичный код при загрузке DLL C# из встроенного ресурса. Трюк заключался в том, чтобы поместить этот код в файл, который не ссылался на C# DLL. Кажется, что задержка-загрузка.Чистые сборки возникают при вводе в блок компиляции (файл .cpp), который содержит ссылку на рассматриваемую сборку, а не когда вызов в ссылочной сборке фактически выполнен, если когда-либо. – mheyman