Mam projekt C# dll (my_cs_dll.dll
), który definiuje klasę statyczną z funkcją statycznego elementu.jak wywołać funkcję managed (C#) z C++?
namespace Foo
{
public static class Bar
{
public static double GetNumber() { return 1.0; }
}
}
Mam również projekt dll C++, który używa/clr.
#using <my_cs_dll.dll>
double get_number_from_cs() { return Foo::Bar::GetNumber(); }
Dodałem odniesienie do 'my_cs_dll.dll'
w C++ projektu wspólnych właściwości odwołuje sekcję (kopia lokalna kopia/Zależności są zarówno prawdziwe).
Dodałem również ścieżkę do 'my_cs_dll.dll'
w projekcie C++ Właściwości konfiguracji C/C++ Ogólne "Rozwiąż # używając odnośników".
Wszystko buduje się bezbłędnie, jednak w czasie wykonywania otrzymuję wyjątek "System.IO.FileNotFound" z systemu, który twierdzi, że nie może znaleźć zespołu my_cs_dll.dll
.
Obie biblioteki DLL są zdecydowanie obecne w tym samym katalogu, z którego korzystam.
Próbowałem wszystkie rodzaje wariacji na temat ustawień wymienionych powyżej i czytać wszystko udało mi się znaleźć na manged/niekontrolowana współdziałanie, ale nie wydaje się dostać mój mózg wokół tego, co jest nie tak ...
I 'm przy użyciu VS2008 & .NET 3.5
Cześć Matt, „musi znajdować się w katalogu (lub podkatalogu), gdzie plik wykonywalny znajduje się, w przeciwieństwie do lokalizacji dll to jest to za pomocą” W DLL są zagnieżdżone kilka podkatalogów pod exe . Przeniesienie zarządzanej biblioteki dll do tego samego katalogu, co plik wykonywalny, spowodowało usunięcie problemu. Dziękujemy! – mark
OK, świetnie. Miałem wrażenie, że tak długo, jak dll znajduje się w podkatalogu pliku wykonywalnego, niezależnie od tego, jak głęboko, zespół zostanie rozwiązany. Ale jak już powiedziałem, minęło trochę czasu, odkąd na to patrzyłem. –
Użyłem podobny kod podczas ładowania biblioteki DLL C# z osadzonego zasobu. Sztuczka polegała na umieszczeniu tego kodu w pliku, który nie odwoływał się do biblioteki DLL C#. Wydaje się, że opóźnienie-obciążenia.Zespoły sieciowe występują po wejściu do jednostki kompilacji (pliku .cpp), która zawiera odniesienie do danego zespołu, a nie kiedy wywołanie w zestawie referencyjnym jest faktycznie wykonane, jeśli w ogóle. – mheyman