(Einfachste) DLLs erstellen und einbinden
-
und warum verursacht das ne Warnung? ->

-
Weil der Standard eben einfach will dass eine Zeile mit Newline abgeschlossen wird. Auch die letzte.
-
Und wie bindet man dll's ein deren .a's man nicht hat?
-
über LoadLibrary(), dann hast du aber den Nachteil, dass du auf keine Klassen zugreifen kannst.
nur Variablen und Funktionen.
-
und wie ginge das mit meiner oben genannten dll?
-
dann musst du deine funktion erstmal in einen extern "C" Block hauen.
// header extern "C" { int __declspec(dllexport) hallo(); } // cpp int hallo() { return 1; }und im hauptorgramm dann so:
HMODULE dll = LoadLibrary("Deinedll-datei.dll"); typedef int(*fn)(); // Funktionszeigertyp fn zeiger_auf_deine_funktion = (fn)GetProcAddress(dll, "hallo"); cout << zeiger_auf_deine_funktion() << endl;So kurz gesagt. Jedenfalls mit loadlibrary und getprocaddress. Das extern "C" muss sein, wei lder C++-Compiler sonst name-mangeling anwendet, also er verschlüsselt deine funktionsnamen, damit man auch überladene funktionen schreiben kann, was in extern "C" nicht geht. Dafür heißt deine funktion aber auch so, wie du sie nennst und nciht mit kryptischen @ und so drin.
[/cpp]
-
Main.cpp:
#include <windows.h> typedef void (*hallo_ptr)(void); int main() { HMODULE dll_handle = LoadLibrary("deine.dll"); hallo_ptr hallo_fn = (hallo_ptr)GetProcAddress(dll_handle, "hallo"); (hallo_fn)(); FreeLibrary(dll_handle); }hallo.cpp:
#include <iostream> using namespace std; #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT #endif extern "C" //C++ Name-Mangling umgehen { void DLL_EXPORT hallo() { cout<<"Hallo Welt"<<endl; } }Grüße,
Martin
EDIT: Da war jemand schneller

-
Sag mal, wir sind hier im C++-Forum und nicht im WinAPI-Forum...
-
geht es auch ohne winapi?
-
Falls du damit meinst, mit der Standard-C++ Library: nein
AFAIK bietet aber z.B. wxWidgets Funktionen zum platformunabhängigen Laden von dynamischen Bibliotheken an...Grüße,
Martin
-
findet man denn zu den meisten dll's die dazu passenden .a's und header dateien?
-
Das kommt darauf an: Wenn die DLL dazu gedacht ist, von dir verwendet zu werden, und du sie nicht einfach aus irgendeinem Programm klaust, sollte in jedem Fall irgendeine Form von Importbibliothek beiligen. Kann halt passieren, dass dort keine Bibliotheken für den GCC beiligen, sondern nur für MS-VC++ oder BCB, keine Ahnung, ob es Tools gibt, die diese entsprechend umwandeln können.
Fein raus bist du, wenn es sich um OpenSource Bibliotheken handelt, da diese meist direkt für den GCC entwickelt wurden und, falls nicht schon Binaries beiligen, unkompliziert gebaut werden können.
Header liegen in jedem Fall bei, da du die Bibliothek ja sonst überhaupt nicht verwenden kannst...Grüße,
Martin
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
alfonsospringer schrieb:
geht es auch ohne winapi?
lol
