-- SolveighMatthies - 26 Apr 2007

Windows-spezifisch:

Windows-Header

  • 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

  • Export einer Klasse:
#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)

This topic: Frontend > PPCDevelopments > CodeMerge > CodingForWindows
Topic revision: 03 Apr 2008, SolveighMatthies
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback