Wie kann man mit C++ eine Dll erstellen?
-
Bei PureBasic würde man einfach schreiben:
ProcedureDll.b Add(lhs.b,rhs.b) ProcedureReturn lhs+rhs EndProcedure ProcedureDll Warte5s() Delay(5000) EndProcedure
das .b steht für Byte. Ich glaube das wäre das Äquivalent zu short.
Und dann auf "Shared Dll erstellen" klicken.
Wie Funktioniert das also bei C++?
-
garnicht. C++ kennt keine Dlls.
obbba schrieb:
das .b steht für Byte. Ich glaube das wäre das Äquivalent zu short.
Nein.
unsigned char byte;
ist definitionsgemäß 1 Byte breit.
Greetz, Swordfish
-
obbba schrieb:
Bei PureBasic würde man einfach schreiben:
das .b steht für Byte. Ich glaube das wäre das Äquivalent zu short.Byte sind 1 Byte, das ist äquivalent zum Datentyp "char", bzw. "unsigned char", je nachdem wie byte in PB definiert wird.
Short sind 2 Byte, also 16 Bit.obbba schrieb:
Und dann auf "Shared Dll erstellen" klicken.
Wie Funktioniert das also bei C++?
Du teilst dem Compiler mit, dass er eine .dll erstellen soll statt eines executables. Das macht in Deinem Fall bei PureBasic der Editor, wenn Du auf 'SharedDLL erstellen' klickst.
Statt ProcedureDll fügst Du "__declspec(dllexport)" in den Funktionskopf ein (bei MinGW oder VisualC).
Weiterhin musst Du Dich entscheiden, welche Aufrufkonvention Du verfolgen möchtest. WINAPI ist hier Dein Google-Stichwort, wenn Du eine .dll erstellen möchtest, wenn ich mich recht entsinne.Du kannst Dir Code::Blocks als IDE runterladen, dort findet sich auch der MinGW Compiler. Das Paket ist komplett kostenlos. Hier kannst Du ebenfalls eine Beispiel-Library anlegen, dann hast Du bereits einen Quellcode, an dem Du Dich orientieren kannst.
Wenn Du eine C++ .dll anlegst, wirst Du eventuell merkwürdige Namen in der DLL wiederfinden, da in C++ Funktionen überladen werden können (also Funktionsnamen mehrfach mit unterschiedenen Parametern existieren können).
Wenn Du eine in C++ geschriebene Library verwendest, die keine Überladung benötigt, solltest Du die Library mitextern "C" { /* Lib-Code */ }
markieren, so dass einfache Namen exportiert werden.
Bitte beachte, dass PureBasic eine strukturierte Sprache ist, C++ aber strukturiert, objektorientiert und generisch programmiert werden kann. C++ zu programmieren macht nur Sinn, wenn man wenigstens objektorientierte Programmierung kennt.
Bevor Du in C++ Libs erstellst, solltest Du Dich also mit den Ideen von C++ vertraut machen.
Die Konzepte von Purebasic wirst Du in C abgebildet finden, vielleicht ist es daher für Dich günstiger, erstmal auf C zu wechseln, Deine Library als Übung in C zu schreiben und Dich dann mit objektorientierten und generischen Konzepten vertraut zu machen.Viel Erfolg.
-
Ich kann schon ein bisschen C++ und mit Klassen arbeiten.
Ich werde mir mal Code::Blocks runterladen und dann weitersehen.
-
(Tut mir Leid, als Unregistrierter kann ich nicht editieren.)
Da kapier ich leider gar nichts...
Wie komm ich denn an die Beispiel Library ran?
Aber ich hab gesehen, dass man beim erstellen eines
neuen Projekts gefragt wird ob es eine Dll sein soll.Vieleicht sollte ich es doch mit C ausprobieren.
-
obbba schrieb:
Ich kann schon ein bisschen C++ und mit Klassen arbeiten.
Es geht nicht nur darum, class vor ein strukturiertes Programm zu schreiben.
Ich rate zu einem guten Buch oder einem erklärenden Bekannten, der (wirklich) vertraut ist mit OOP.
OOP ist nicht nur ein 'bisschen'obbba schrieb:
(Tut mir Leid, als Unregistrierter kann ich nicht editieren.)
Da kapier ich leider gar nichts...
Wie komm ich denn an die Beispiel Library ran?
Aber ich hab gesehen, dass man beim erstellen eines
neuen Projekts gefragt wird ob es eine Dll sein soll.Vieleicht sollte ich es doch mit C ausprobieren.
Öhm... Mißverständnis... glaube ich...
Code::Blocks ist ein IDE, kein Compiler! Also sowas wie der Editor in PureBasic.
In Code::Blocks schreibst Du entsprechend C oder C++ Code rein, genau wie Du in den PBEditor einen PureBasic Code schreibst.Starte Code::Blocks, lege ein Projekt als DLL an und kompiliere die Lib.
Wenn Du in dem Verzeichnis dann eine "wie-auch-immer-genannte.dll" findest, dann füge entsprechend Deine Funktionen hinzu.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
DLLs:
http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap17.htm
http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api6.htm