Aufruf einer unmanaged DLL aus managed DLL heraus

lazyjens

Grünschnabel
Hallo,

trotz intensiven googelns bin ich leider noch nicht auf die Lösung meines Problems gestoßen, auch wenn einige Beitrage auch in diesem Forum schon nahe dran waren.
Ich habe ein C++ 6-Projekt, welches ich nach .NET 2005 problemlos portiert habe. In dem Projekt wird eine C++ 6-DLL über dllimport genutzt. Auch die Umwandlung des Projekts in eine managed-Anwendung stellte kein Problem dar. Alles funktionierte wunderbar. Dummerweise muss ich diese C++.NET 2005-Anwendung in eine DLL umwandeln, um diese in C# verwenden zu können. Die Umwandlung funktioniert auch problemlos und ich kann (theoretisch) auf die Datentypen der DLL zugreifen. Kompilieren ist kein Problem. Es gibt erst ein Problem bei der Ausführung des C#-Programms.
Hier wird, wenn ich die Fehlermeldung richtig interpretiere, gemeckert, dass die alte C++-DLL, die aus der .NET-DLL heraus aufgerufen wird, nicht gefunden werden kann, da es sich nicht um ein Assembly handelt. Es kommt eine System.BadImageFormatException, mit der Fehlermeldung, die sich auf die alte C++ 6-DLL bezieht (Das Setup der Assembly konnte nicht abgeschlossen werden (hr = 0x80131018)).
Nun zu meiner Frage: Wie kann ich C# begreiflich machen, dass die alte C++ 6-DLL auch als solche und nicht als Assembly zu behandeln ist. Er soll sie halt einfach, wie C++.Net auch, von der Festplatte lesen und nicht im Cache kramen oder sonst was veranstalten...

Für Tips wäre ich sehr dankbar und mein Wochenende wäre gerettet...

Grüße
Jens
 
Also ich bin mir nicht sicher ob ich das gleiche Problem habe wie du, aber ich glaube so ca.!
Kann die C++ DLL nicht einbinden weil es keine Assembly ist!

Hast du für dein Problem bereits eine Lösung?
 
In .NET gibt es weiterhin den DLLImport-Ausdruck. Allerdings wird er mittlerweile als Attribut verwendet. Hier mal ein Beispiel-Code:

Code:
( ... )

using namespace System::Runtime::InteropServices;

( ... )

[DllImport("DLLDatei.dll", EntryPoint = "Funktionsname")]
extern "C" void FunktionsName( string Parameter );

Als DLL dient natürlich die alte DLL-Datei.

Ich hoffe, dass das dein Problem löst.

Gruß
PhoenixLoe
 
Zurück