Ładowanie DLL (C++) do projektu C#

0

Witam,
Walczyłem ostatnio z wczytywaniem dll napisanych w c++ do projektu c#.
Czy mozna w jakiś sposób użyć do wczytywania biblioteki napisanej w C++ klasy Assembly ? czyli Assembly.LoadFile(path) ?

Mianowicie chodzi mi o zastosowanie pewnej wygodnej składni :

interface IGenerator{
	int Generate();
	void Method1();
	void Method2();
	void Method3();

}
var file = Assembly.LoadFile(path);
var type = file.GetType(); 
var instance = (IGenerator)Activator.CreateInstance(type); 
instance.Generate();  
instance.Method1();
instance.Method2();
instance.Method3();

Jak coś dll została napisana w C++ przy użyciu Dev-C++ (TDM-GCC 4.9.2 64-bit)
Pozdrawiam

0

Załadowanie to nie koniec, ale początek problemów.

Inne jest prawie wszystko: głupie stringi, model alokowania pamięci, semantyka wskaźników i referencji itd. Tablicy vtable nawet nie umiem sobie wyobrazić (wiodące dla Twojego pomysłu). Nie wierzę, że DLL C++ jest do połączenia wprost, wymaga znacznych przygotowań (być może w jakimś trywialnym przypadku się da). Generalnie DLL obiektowe (mowa o nieco ambitniejszym OOP) zawsze wymagały czujności, NAWET w tym samym środowisku (pamiętam miny DLL Borland->Borland)
Znacznie łatwiej powinno się łączyć bibliotekę DLL w C. (Czasem warto dewelopować w C++ ale interfejs dać w extern C, np zamiast this'a pierwszy argument void *, itd...)

Być może rozwiązanie znajdziesz w DOBRYM podręczniku C# (rozdział nt unsafe, i takich interfejsów), mam taką cegłę z MS do którejś poprzedniej wersji. Być może pomoc znajdziesz w języku C++/CLI (generalnie tfu, tfu) https://4programmers.net/Forum/C_i_.NET/196733-o_naduzywaniu_c++cli

1
ice25 napisał(a):

Czy mozna w jakiś sposób użyć do wczytywania biblioteki napisanej w C++ klasy Assembly ? czyli Assembly.LoadFile(path) ?

Nie, Assembly to element CLR.
O ile wywołanie samych funkcji jest dość trywialne dzięki DllImport i extern, o tyle z całymi obiektami nie jest już tak łatwo, ale jakoś tam się da: https://www.codeproject.com/Articles/9903/Calling-Managed-Code-from-Unmanaged-Code-and-vice

1 użytkowników online, w tym zalogowanych: 0, gości: 1