Selbe Header in DLL udn Clientanwendung verwenden
-
Hallo, ich möchte die Header meiner DLL ohne Änderung zugleich als Header in der Clientanwendung verwenden.
Dies geht mit einem Trick, der unter folgenden Links identisch beschrieben wird:http://marquardtnet.info/cecke/tutorials.8/8_dll.html
http://msdn.microsoft.com/de-de/library/8fskxacy.aspxCode zum Beispiel:
#ifdef __DLL__ # define DLL_TYP __declspec(dllexport) #else # define DLL_TYP __declspec(dllimport) #endifNur Frage ich mich, wo muss das _DLL_ oder _EXPORTING definiert werden, in welche Datei (also z.B. #define _DLL_) muss das rein?
Danke.
PS: Ich hoffe ich bin im richtigen Forum, bitte nihct böse sein wenn nicht.
-
Das definierst Du nur in Deinem DLL-Projekt! Und dort in den Projekteinstellungen (C/C++|Preprocessor Definitions).
Oder alternativ in der cpp-Datei *bevor* die die h-Datei includierst.
-
Wenn ich das richtig verstanden habe willst du wissen wo du das DLL_TYP hinschreiben sollst, richtig?
Das muss entweder vor die funktion oder wenn du eine Klasse exportieren willst vor die Klasse, also:
#include "dll_global.h" //<-- da stehen die defines drin class DLL_TYP eineKlasse { //... };oder
#include "dll_global.h" void DLL_TYP eineFunktion(int a, int b) { //... }
-
Danke an Jochen Kalmbach, das mit den C/C++|Preprocessor Definitions hat funktioniert, das mit dem include in der cpp Datei ging nicht.
Jetzt kann ich die header für die dll in identischer Form auch bei der Clientanwendung einbinden.
-
also ich kenn es so, dass das projekt eine header datei hat, die jeder header einbindet.
heißt bei uns meistens dllnamedefs.h
die definiert das importzusätzlich gibt es ja noch das precomiled header file, dass jede cpp einbindet.
die definiert das exportda in den c/cpp zuerst immer das pch includiert werden muss gilt beim compilieren immer das export
wird von woanders nur der header eingebunden ist nur das import siochtbar:
beispiel:
myDllDefs.h
#ifdef _MYDLL_SPEC_ # define _MYDLL_SPEC_ __declspec(dllimport) #endifmyDllpch.h
#define _MYDLL_SPEC_ __declspec(dllexport)irgendein.h
#include "myDllDefs.h class _MYDLL_SPEC_ MyClass { public: static int calcStuff(); } void _MYDLL_SPEC_ makePeace();irgendein.cpp
#include "myDllpch.h" #include "irgendein.h" #include <string> static int MyClass::calcStuff() { return 666; } void makePeace() { throw std::string("Not Possible"); }