--
SolveighMatthies - 26 Apr 2007
Windows-spezifisch:
- je nach Bedarf benoetigt (nur als Beispiel)
#ifdef WIN32
#include <windows.h> // allgemeine Windows-Typen und Funktionen
#include <winsock2.h> // Socket-Funktionen
#include <time.h> // Zeit-Funktionen
#include <Ws2tcpip.h> // Struktur ->addrinfo
#endif
Windows-DLLs
Klassen, einzelne Funktionen und ggfs. Variablen muessen explizit exportiert werden, z.B. mittels Makro:
#ifdef DLL_EXPORTS
#define E_API __declspec(dllexport)
#else
#define E_API __declspec(dllimport)
#endif
- saemtliche Exportmakros sind ausgelagert in einem eigenen Header (platform.h), der fuer jede Verwendung inkludiert werden sollte:
#ifdef WIN32
#include <platform.h>
#endif
#ifdef WIN32
class E_API Value { /// Class for storing a single value
#else
class Value {
#endif
...(Klassendefinition)
(unter Linux genuegt die leere Definition von E_API (#define E_API); man koennte sich an dieser Stelle das #ifdef/#else sparen)
- Export einer einzelnen Funktion:
#ifdef WIN32
void E_API accData2Corba(const DA::AccData& in, CI::AccData& out) {
#else
void accData2Corba(const DA::AccData& in, CI::AccData& out) {
#endif
...(Funktionsdefinition)
statisches Einbinden von DLLs:
- in der aufrufenden Anwendung in den Projekteinstellungen die Exportbibliothek der Wunsch-DLL eintragen sowie die jeweiligen Pfade (include und lib) anpassen
- in der aufrufenden Anwendung ist das Exportmakro nicht als Praeprozessordefinition angegeben, der Import erfolgt automatisch
- die explizite Verwendung von __declspec(dllimport) empfiehlt sich in dem Fall, wenn die aufrufende Anwendung nicht direkt mit der DLL verknuepft ist
Dynamisches Einbinden von DLLs:
- hierzu stehen Windows-spezifische Funktionen (LoadLibrary, GetProcAddress) zur Verfuegung, die zur parallelen Nutzung unter Linux (dlopen, dlsym) in eine eigene Klasse gekapselt wurden (class OS/LoadLib)