C++ - Klasse aus DLL laden
-
Hallo zusammen,
ich habe in C++ eine Klasse in eine DLL gepackt und möchte diese jetzt unter C# nutzen (es ist KEINE MFC-Klasse, sondern reine WinAPI):
extern "C" __declspec (dllexport) class CKlasse { . . . . };
Diese Klasse möchte ich nun in C# einbinden und nutzen:
[DllImport("mydll.dll")]
Wie kann ich jetzt diese Klasse einbinden?
Vielen Dank für Eure Hilfe
-
Du kannst mit DllImport keine Klassen laden. (Es gibt zwar einen Weg, der ist jedoch zu aufwendig)
Eine weitere Möglichkeit die es noch giebt ist mit managed C++ eine Wrapper Klasse zu schreiben und diese kannst du dann einbinden.
-
Ah ja, das heißt ich muss die Klassen, die ich in eine DLL exportieren will, in ein Visual C++.net Projekt einbinden und dann eine DLL erstellen, oder? Was muss ich da beachten? Funktioniert der Export gleich wie bisher auch(mit dem extern _C_ blabla)?
Vielen Dank!
-
So, ich hab jetzt mal eine Wrapper-Klasse in VC++ .net geschrieben, die die Befehle zur unmanaged Klasse durchschleift:
#pragma once #include "unmanagedclass.h" using namespace System; namespace blobDll2 { public __gc class Wrapper { private: UnmanagedClass* uc; public: Wrapper() { uc = new UnmanagedClass(); } Wrapper(System::String* filename, System::Boolean create) { uc = new blobObject(filename,create); } ~Wrapper() { delete uc; } System::Void* read(System::Int32 entryIndex, dirEntry& entryValue) { return uc->read(entryIndex, entryValue, 0, 0, 0); } }; }
Ich bekomme hier jetzt allerdings eine Fehlermeldung in der read-Methode:
error C2440: 'Typumwandlung': 'System::String __gc *' kann nicht in 'char *' konvertiert werden
Irgendwie kann er also System::String nicht in char* konvertieren. Was mache ich falsch?
Vielen Dank!