unmanaged (mixed) *.obj dateien in managed dll einbinden
-
ich hab nun folgendes Problem. Ich versuche mein Projekt mit einen anderen zusammen zu binden. Mein Projekt besteht aus einigen Unmanaged klassen. Die hab ich in einer Lib. Einigen Managed Klassen (die kommen noch nirgendswo rein dort nehm ich aktuell die obj Dateien) und dummerweise eine Klasse die zwar unmanaged ist, aber mit in die Managed dll sollte da Sie sehr viele der Managed Klassen benötigt.
Linke ich das ganze Managed Zeugs (inklusive der Unmanaged Klasse) in eine Dll klappt alles problemlos. Linke ich aber die obj Dateien von hand zu einem anderen Projekt geht das zwar aber keine der Klassen aus der DLL kann genutzt werden. Das geschieht aber erst sobald ich wirklich die obj datei der unmanaged Klasse linke. Gibts da irgend einen speziellen Compilerschalter für? Muss ich irgendwas anderes beachten? Prinzipiell muss es ja gehen, da es ja klappt wenn ich das ganze nur in eine eigene DLL Linke. Es ist aber zwingend erforderlich das ganze mit dem anderen Projekt zu mergen.
-
ich konnte das problem weiterhin eingrenzen und zum Teil auch lösen, leider Schmeckt mir die Lösung nicht so recht. Da wir ggf Anwendungsfälle haben welche mit meiner Lösung nicht funktionieren.
Das Problem ist folgendes. Prinzipiell schaut die Klasse so aus
class Foo { public: Foo(IBar^ bar); virtual IBar^ getBar() //<-- wird nur von managed Seite aufgerufen private: gcroot<IBar^> m_bar; }
Die getBar() Funktion löst das verhalten aus. Mache ich das virtual weg klappt alles. gebe ich anstatt ein Bar^ ein gcroot<Bar^> zurück klappt auch alles. Wie schon erwähnt klappt es auch wenn ich das ganze als eigenes DLL Projekt anlege. Es klappt nur dann nicht wenn ich die Obj Dateien in ein anderes Dll-Projekt hinzu linke.