ulmerschwabe
Grünschnabel
Hallo alle zusammen
ich habe schon viel Rumgegooglet und auch schon das ein oder andere versucht, aber immer ist es am Laden der dll bzw. am Aufruf der Funktion gescheitert
Grob: Ich möchte von einer unmanaged C++-dll Objekte in C# verwenden.
Mein Betriebssystem ist XP-Prof, ich entwickle unter VS2008-Prof., verwende .Net 3.5 und die unmanaged dll wurde ebenfalls unter VS2008/C++ entwickelt.
Um nun mein Problem anzugehen, habe ich mir einen C++ (managed) Wrapper geschrieben, der auf eine Funktion von der C++(unmanaged)-dll zugreifen soll.
Hier der unmanaged Code:
In meiner (managed)C++-dll verfahre ich wie folgt:
Beim Kompilieren wird mir die Kompilerwarnung "warning C4273: 'GetUnmanagedObject': Inkonsistente DLL-Bindung." um die Ohren geworfen.
Dies konnte ich allerdings bis jetzt noch nicht beheben. Evtl. liegt dies einfach daran, dass die (unmanaged)dll mit dem define: UNMANAGED_EXPORTS erstellt wurde und meine ohne... Aber vielleicht liegt mein Problem auch gerade hier
Rufe ich nun CManagedObject::Method von meiner C#-Applikation "normal" auf, so stürzt die Applikation ab, im Debugger läuft alles soweit gut, bis ich an den Aufruf von GetUnmanagedObject komme. Hier wird folgender Fehler geworfen:
"Eine nicht behandelte Ausnahme des Typs "System.EntryPointNotFoundException" ist in unmanaged.dll aufgetreten.
Zusätzliche Informationen: Der Einstiegspunkt GetUnmanagedObject wurde nicht in der DLL unmanaged.dll gefunden."
GetUnmanagedObject wurde aber in der (unmanaged)-Dll richtig exportiert und via einer (unmanaged)-exe kann ich auch darauf zugreifen?
Gebaut habe ich die (managed)-dll mit /clr, falls das noch weiterhilft.
Ich hoffe, dass mir hierbei jemand weiterhelfen kann und bedanke mich schoneinmal im Vorraus
Liebe Grüße
ich habe schon viel Rumgegooglet und auch schon das ein oder andere versucht, aber immer ist es am Laden der dll bzw. am Aufruf der Funktion gescheitert
Grob: Ich möchte von einer unmanaged C++-dll Objekte in C# verwenden.
Mein Betriebssystem ist XP-Prof, ich entwickle unter VS2008-Prof., verwende .Net 3.5 und die unmanaged dll wurde ebenfalls unter VS2008/C++ entwickelt.
Um nun mein Problem anzugehen, habe ich mir einen C++ (managed) Wrapper geschrieben, der auf eine Funktion von der C++(unmanaged)-dll zugreifen soll.
Hier der unmanaged Code:
Code:
#ifdef UNMANAGED_EXPORTS
#define UNMANAGED_API __declspec(dllexport)
#else
#define UNMANAGED_API __declspec(dllimport)
#endif
...
UNMANAGED_API void GetUnmanagedObject( CIUnmanagedObject& p_pUnmanagedObject ) ;
In meiner (managed)C++-dll verfahre ich wie folgt:
Code:
using namespace System::Runtime::InteropServices;
[DllImport("unmanaged.dll", EntryPoint = "GetUnmanagedObject")]
extern void GetUnmanagedObject( CIUnmanagedObject& p_pUnmanagedObject );
CManagedObject::Method()
{
...
CIUnmanagedObject foo;
GetUnmanagedObject(foo);
}
Beim Kompilieren wird mir die Kompilerwarnung "warning C4273: 'GetUnmanagedObject': Inkonsistente DLL-Bindung." um die Ohren geworfen.
Dies konnte ich allerdings bis jetzt noch nicht beheben. Evtl. liegt dies einfach daran, dass die (unmanaged)dll mit dem define: UNMANAGED_EXPORTS erstellt wurde und meine ohne... Aber vielleicht liegt mein Problem auch gerade hier

Rufe ich nun CManagedObject::Method von meiner C#-Applikation "normal" auf, so stürzt die Applikation ab, im Debugger läuft alles soweit gut, bis ich an den Aufruf von GetUnmanagedObject komme. Hier wird folgender Fehler geworfen:
"Eine nicht behandelte Ausnahme des Typs "System.EntryPointNotFoundException" ist in unmanaged.dll aufgetreten.
Zusätzliche Informationen: Der Einstiegspunkt GetUnmanagedObject wurde nicht in der DLL unmanaged.dll gefunden."
GetUnmanagedObject wurde aber in der (unmanaged)-Dll richtig exportiert und via einer (unmanaged)-exe kann ich auch darauf zugreifen?
Gebaut habe ich die (managed)-dll mit /clr, falls das noch weiterhilft.
Ich hoffe, dass mir hierbei jemand weiterhelfen kann und bedanke mich schoneinmal im Vorraus
Liebe Grüße