Klasse mit MFC in standard dll packen
-
Hallo!
Ich habe eine Klasse geschrieben, deren Quellcode ich nicht umbedingt jerdermann verfügbar machen möchte. Da ich darüber hinaus auch immer wieder mal was neues dazulernen möchte bin ich dann auf DLLs gekommen.
Ich möchte also aus meiner Klasse eine DLL machen. Und zwar in eine standard DLL, da mit ihr auch Leute arbeiten sollen, die kein MFC benutzen.
Eine MFC DLL habe ich schon erstellen können, und die funktioniert auch, aber wie gesagt nur mit MFC Projekten.Jetzt habe ich schon im Buch VC++ in 21 Tagen versucht das Beispiel zu verstehen, wie man aus einer MFC dll eine standard dll macht, aber das hat leider nicht geklappt.
Dort steht zum Beispiel, dass man keine Klasse, sondern nur Funktionen in eine standard dll bekommt. Mit enigen umwegen gehen aber auch Klassen.
Genau das verstehe ich nicht. . .In dem Beispiel dort wurden dann immer so Dinge wie "extern "C" function_type PASCAL EXPORT" vor die Methoden der Klasse geschrieben. Aber was mache ich denn mit den Eigenschaften der Klasse???? Vor allem, weil dort auch steht, das man "die Klasse in eine Folge von normalen Funktionsaufrufen konvertieren" muss.
Google konnte mir leider auch nicht weiterhelfen . . . ihr vielleicht ?????
Danke
Maik
-
Du kannst zwar die Klasse in eine Dll Packen, musst dann aber die einzelnen Memberfunktionen der Klasse in eigenen internen "Dll Funktionen" aufrufen.
Du hast z.B. intern eine Instanz deiner Klasse, damit kann aber niemand etwas anfangen. Deshalb musst du die etwa so verpacken:
//dll Intern class Cmyclass { public: void machwas(); }; Cmyclass mycls; //dll export void MeineExportierteFunktion(){ mycls.machwas(); }
Das extern "c" hab ich so verstanden, dass dort die Funktionsnamen mit parametern reinkommen, welche exportiert werden sollen z.B:
extern "C" { void __declspec (dllexport) MeineExportierteFunktion(); }
Du rufst dann extern die funktion "MeineExportierteFunktion()" auf und intern die memberfunktion "machwas()" auf, exportiert aber normale funktionen.
Ps. So hab ich es verstanden, hoffentlich ab ich nicht totalen Müll gelabert
-
Hi und Danke für deine Antwort.
Aber ist das ganze so nicht etwas kompliziert?Ich habe jetzt bei Codeprojekt diesen Artikel gefunden :http://www.codeproject.com/dll/SimpleDll2.asp, aber leider klappt das ganze so auch nicht ganz.
Ich konnte jetzt zwar eine DLL erstellen, aber wenn ich dann die DLL in einem anderen Projekt benutzen möchte, dann sagt mir der Compiler "error C2470: Sieht wie eine Funktionsdeklaration aus, es ist aber keine Liste mit formalen Parametern vorhanden; sichtbarer Funktionstext wird übersprungen"
Ich habe das ganz nicht unter VC++6 sondern .Net gemacht. Aber bis zur DLL war alles gleich.
Hat denn noch einer eine Idee, wie ich es anstellen kann. Mir raucht auch schon der Kopf vor lauter unterschiedlicher DLL Typen und Versionen diese zu erstellen. . . .