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!


Anmelden zum Antworten