C++ DLL's
-
Hi,
ich habe ein Problem, DLL's einzubinden, bzw. weiß nicht genau ob die DLL's die ich schon erstellt habe überhaupt fehlerfrei sind.
Ich programmiere in Dev-C++ (4.9.9.2)
Ich habe schonmal folgende Files für die DLL:
dll.h:
#include <stdio.h> #ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #endif extern "C" __declspec(dllexport) int do_add(int x, int y); #endif /* _DLL_H_ */dllmain.cpp:
#include <windows.h> #include "dll.h" extern "C" __declspec(dllexport) int do_add(int x, int y) { return x+y; }..brauche echt Hilfe -.-
Freue mich über jede Antwort.MFG Sys_Shutdown
-
1. Dev-C++ ist veraltet/böse/... u.v.m. Benutze eine anständige Zeitgemäße Entwicklungsumgebung. (Meine Empfehlung Visual c++ Express (kostenlos) von Microsoft)
2. Ich sehe grad keinen Fehler außer das do_add x und y nicht verändert wenn das dafür gedacht war.
-
Erst mal eine Makro defineieren der angibt ob man die Funktion imopieren oder expotieren will.
Den Makro definiert man am bessste in den Vordefnienrte Makros des prrjectes, damit man die Funktionen Expotieren kann.
Wenn man jetzt eine neues Project hat und man benutzt diese Library werden die Sachen dann Impotiert da dieser macro ja nicht defniert ist.
Den Makro "PROJECT_EXPORTS" im Project vordefinieren.
dll.h#if defined(__WIN32__) || defined(_Windows) #ifdef PROJECT_EXPORTS #define DLL __declspec(dllexport) #else #define DLL __declspec(dllimport) #endif #else #define DLL #endif int DLL do_add(int x, int y);dll.cpp
#include "dll.h" int do_add(int x, int y){ return x+y; }
-
hm .. yah werd bei gelegeneheit VC++ laden
und die Funktion soll einfach nur addieren .. ist quasi nur so als test gedacht, nix großes
okay danke für die Hilfe ^^
also liegt nun diese Funtktion in der DLL.
Wie kann man denn nun die DLL's in anderen Projekten konkret einbinden?
Dazu habe ich nämlich nur Informationen gefunden die mich mehr als verwirrt haben..
danke für die bisherige schnelle Hilfe

MFG Sys_Shutdown
-
Mein Ansatz wäre jetzt folgender:
HMODULE hDLL = LoadLibrary("DLL.dll"); FARPROC Func = GetProcAddress(hDLL, "do_add");aber das reicht nicht oder ? oO
danke für jede weitere Hilfe
MFG Sys_Shutdown
-
Wenn du es so gemacht hast wie ich es bescheiben hab dann kannst du die Funktionen locker impotieren.
Da du dann im neunen Projekt das makro nicht definiert hast geht er davon aus wo willst die Funktionen Impotieren.
Da zu braucht du dann nur die header datein zu includieren und die .lib datein im Linker einbenden damit die DLL ins Prokect eingebunden wird.
-
wird die Funktion dann in die .exe eingelinkt ?
oder greift die .exe dann später auf die dll zu?
letzteres möchte ich ja erstmal erreichen
MFG Sys_Shutdown
-
Da es eine dynamische library ist wird beim aufruf der exe aud dll zugegreiefen, somit kann man auch locker einfache updaten machen de dem man die dll einfach mit der neuen version überschreibt.
Bei statischen librarys muss man die library bei jeder veränderung immer neu einbinden und compilieren
-
ahh okay danke.
..und bei meinem Beispiel oben ist das jetzt dann dynamisch oder statisch?
Dynamisch oder?Außer, dass da halt noch was fehlt.

MFG Sys_Shutdown