aus Klasse dll erstellen?
-
Hallo zusammen,
ich hab hier schon so vieles gefunden, dass ich mir dachte, meldest dich hier mal an und kommst mit deinem Problem.
Also ich und nen Kumpel versuchen uns grad einem kleinen Projekt mit verschiedenen Programmiersprachen. Darunter C++, Delphi und PureBasic. (über den Sinn sei mal bitte nicht diskutiert
)Dazu wollen wir eine dll verwenden die versch. Sachen beinhaltet, unter anderem AES. Hierzu habe ich eine Implementierung gefunden, mit der ich an und für sich gut zurecht komme, da ich ja 2 Jahre C++ in der Schule hatte.
Jetzt handelt es sich aber um eine Klasse?! Meine Idee war jetzt, dass ich im DevC++ einfach eine neue DLL erzeuge und die Klasse include. Doch wie funktioniert es dann, dass diese in Delphi/PureBasic verwendet werden kann? Können die dann auch einfach Objekte der Klasse erstellen und drauf zugreifen, oder muss ich mir da selber noch was drumherum basteln, was dann die Klasse verwendet und das zur Verfügung stellen? Wie sieht das mit den Dateitypen aus? Wenn ich als Parameter einen char* erwarte, was muss dann z.B. bei Delphi/PureBasic übergeben werden?
-
Du legst mit VC++ ein neues Projekt als DLL an und
kopierst deinen Source Code da rein.Dann im Header
#define DllExport __declspec( dllexport )class DllExport MyClass
{
};Schau in der Hilf nach von VC++ oder bei Microsoft.
Dann bekommt man eine .lib und eine .dll.
Wie Du jetzt auf die DLL von Delphi oder PureBasic zugreifst,
dass kann Du in der Hilfe nachlesen.
In C++ kann man mit LoadLibrary eine DLL laden und auf die
Funktionen zugreifen. Besser ist aber die DLL in das C++ Projekt
einzubinden über die Settings. Mit Visual Basic kann man ebenfalls
auf DLL, die in C oder C++ programmiert sind zugreifen. Die Funktion,
mit der man die DLL laden kann mußt Du selber heraussuchen. Ich habe
das vor Jahren mal gemacht.Heute mit .NET/CLI such mal nach managed C++.
Ich habe nit C# auf managed C++ Objecte zugegriffen.
Das funktioniert recht schick.Jetzt hast Du genug Schlagwörter.
viel Spaß
-
dumme frage aber wozu braucht man dll dateien?
kann man nicht einfach alles in eine .exe datei schreiben?mfg
-
Hallo,
also das einbinden ist in allen Sprachen kein Thema. Desweiteren hab ich auch kein VC++ sondern den DevC++, sowie nen Borland C Builder (glaub 6).
Aber nochmal die Frage. Kann ich in der dll eine Klasse anbieten, oder muss ich wirklich Funktionen drum herum bauen, die die Klassen dann ansprechen und verwenden?
Domi
-
Wenn du die dll in anderen Sprachen oder auch nur bei anderen Compilern nutzen willst mußt du Funktionen nehmen. Klassen sind schon bei verschiedenen C++-Compilern fast unmöglich.
-
Ah okay, das ist doch schon mal eine Antwort die hilft.
Aber was mir immer noch nicht klar ist:
Wenn ich Funktionen schreibe, die ich in meiner dll zur Verfügung stellen will, dürfen dann die wenigstens auf Klassen und deren Objekte zugreifen, bzw diese erstellen und nutzen?
Domi
-
Sicher dürfen sie das. Du darfst diese Klassen nur nicht exportieren. Es gibt zwar auch da Möglichkeiten (COM), da kenne ich mich aber nicht aus.
Die Parameter deiner Funktionen sollten bei sprachübergreifenden dlls nur einfache Datentypen (PODs) sein.
-
Domi schrieb:
Wenn ich Funktionen schreibe, die ich in meiner dll zur Verfügung stellen will, dürfen dann die wenigstens auf Klassen und deren Objekte zugreifen, bzw diese erstellen und nutzen?
Das einer der wenigen Punkte wo ich dank fehlenden Compilersupport auf void-Pointer zurückgreife und auch einige meiner eigentlichen Programmierregeln unterschlage. Der Aufrufende kann das Objekt nicht direkt bearbeiten, sondern erstellt/löscht und macht seine Zugriffe über exportierte Funktionen...
Grob gesprochen etwa so:
void* CreateObjXYZ();
bool DeleteObjXYZ(void* instance);
bool DoSomething(void* instance);
bool SetSomething(void* instance, int value);Das nächste was ich dir rate: Sorg dafür das niemals Exceptions über DLL-Grenzen geschmissen werden, arbeite in der Schnittstelle mit Rückgabewerten oder ähnlichem (Meine Erfahrung in Umgang mit einigen unterschiedlichen Compilern).
cu André