C ++ - Klasse in einer nativen DLL erstellen, die in C # verwendet werden soll

Ich habe ungefähr 3 Tage damit verbracht, über dieses Thema zu lesen ...

Dank der vielen Tutorials und beantworteten Fragen zum Erstellen einer nativen DLL bin ich jetzt total verloren. Wenn Sie etwas Zeit haben, erklären Sie mir bitte ein wenig das Thema und helfen Sie mir - wenn Sie keine Zeit haben, gehen Sie einfach zu der einfachen Form meiner Frage dort unten ...

Folgendes weiß ich bisher über das Thema:

1) Ich muss ein Makro verwenden, das als definiert ist__declspec(ddlexport) und__declspec(ddlimport) vor dem Klassennamen, um alle Klassenmethoden und Variablen zu exportieren

2) Ich muss verwendenextern "C" irgendwo bin ich mir aber nicht sicher wo genau

3) Es gibt viele Möglichkeiten, dies zu tun (übergeben Sie die Klasse als Parameter an Methoden, die dies akzeptieren.

Hier ist warum und wie ich verloren bin:

1) Die meisten Tutorials befassen sich mit dem Export von Methoden, was meiner Meinung nach im Vergleich zu Klassen sehr einfach ist (in C # verwenden Sie [Dllimport, Name der DLL] und rufen dann jede Methode auf).

2) Muss ich verwendenextern "C" mit klassen oder nicht?

3) Wenn ich eine Factory-Methode mit einer Schnittstelle verwendet habe, muss ich die .h-Datei mit der Schnittstelle verteilen?

Folgendes möchte ich tun:

1) Erstellen Sie eine C ++ - DLL mit einer Klasse und exportieren Sie diese Klasse, um sie in .NET oder C ++ zu verwenden. (Ich möchte meinen Code schützen, da ich gesehen habe, wie einfach Sie verwalteten Code mithilfe der gespeicherten IL umkehren können.)

2) Ich möchte 2 DLLs haben, eine native C ++ - DLL und die andere wird die Wrapper-DLL sein. Wenn jemand meine Klasse in C ++ verwenden möchte, kann er die native DLL direkt verwenden und wenn er sie in verwenden möchte C # / VB.net kann er die C ++ / CLI-Wrapper-DLL verwenden ...

3) keine libs, keine header files, keine def files, ... etc ..... nur reine DLLs (2 files werden freigegeben)

Einfache Form

Angenommen, ich möchte ein Objekt in C # aus dieser C ++ - Klasse instanziieren

Class Human
{
 private:
    int Pee_Meter;
 public:
    Void Do_Pee()
       {
         //stuff here
       };
};

Was muss ich tun, nur grundlegende Dinge? Mit der geringstmöglichen Anzahl von Dateien und maximalem Codeschutz, ohne Freigabe von Header-Dateien oder Ähnlichem, nur unter Verwendung von DLLs und wahrscheinlich einer txt-Datei, in der Methodennamen und in DLL zu verwendende Dinge erwähnt werden.

Mit anderen Worten, sind diese Schritte korrekt?

1) Erstellen Sie in VS2012 ein neues Win32-Projekt und wählen Sie dann DLL als Projekttyp aus

2) Makro definieren__declspec(ddlexport) / __declspec(ddlimport) und benutze es vor dem Klassennamen (soll ich benutzen)extern "C" mit klassen? Wahrscheinlich nicht...)

3) DLL kompilieren

4) Erstellen Sie ein CLR-Projekt in VS2012, um C ++ / CLI zu verwenden

5) Verlinke die native DLL (ich weiß nicht wie ??PInvoke gesamte Klasse

6) Definieren Sie die Wrapper-Klasse (die ich noch lerne, aber ich denke, Sie erstellen eine Methode in der CLI für jede Methode in der nativen Klasse).

7) Kompilieren Sie die CLI-DLL

Soll ich sagen, dass ich Deitel und Ditel C // Deitel und Ditel C ++ // C ++ von D. S. Malik programmiere? In keinem dieser drei Bücher wird etwas darüber erwähnt, wie man DLLs erstellt, was ich für dumm halte.

Abschließend danke ich Ihnen für jede Sekunde, die Sie damit verbracht haben, mir zu helfen. Ich freue mich sehr über jede Hilfe, die Sie geleistet haben, auch wenn Sie mich auf ein Tutorial verwiesen haben, das ich zuvor gelesen habe. Vielleicht habe ich etwas darin übersehen :)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage