Visual Studio: Abhängig von #defines kompilieren
-
Hallo Forum,
ich programmiere eine DLL als Erweiterung für eine Anwendung. Wenn ich meine DLL zB für die Anwendung Version 1.0 kompiliere, dann muß ich eine Funktion so aufrufen:
int RetVal = App.MyFunc(Param);
Und wenn ich für die Anwendung Version 2.0 kompiliere, dann lautet die gleiche Anweisung:
NameSpaceX.SpecialClass RetVal = App.MyNewFunc(Param);
Bei den Konfigurationen im Visual Studio habe ich jetzt V1 und V2 definiert. Ich könnte jetzt sowas machen:
#if V1 int RetVal = App.MyFunc(Param); #elif V2 NameSpaceX.SpecialClass Retval = App.MyNewFunc(Param); #endif
Ich müsste das jetzt hundertfach im Source einstreuen. Gibt es eine elegantere Lösung? Ich dachte jetzt an:
#if V1 #define _RETVAL int #define _FUNC MyFunc #elif V2 #define _RETVAL NameSpaceX.SpecialClass #define _FUNC MyNewFunc #endif ... _RETVAL RetVal = App._FUNC(Param);
Wie macht ihr das?
-
Das geht wahrscheinlich nicht. Ich habe jetzt eine Kapselfunktion geschrieben:
public static int ExecuteFunc(MyApp, string Param) { #if (V1Debug || V1Release) int i = MyApp.MyFunc(Param); return i; #elif (V2Debug || V2Release) NameSpaceX.SpecialClass Retval = MyApp.MyNewFunc(Param); return Retval.IntRetVal; #else throw new Exception("Not implemented"); #endif }
-
abcd schrieb:
Das geht wahrscheinlich nicht. Ich habe jetzt eine Kapselfunktion geschrieben:
public static int ExecuteFunc(MyApp, string Param) { #if (V1Debug || V1Release) int i = MyApp.MyFunc(Param); return i; #elif (V2Debug || V2Release) NameSpaceX.SpecialClass Retval = MyApp.MyNewFunc(Param); return Retval.IntRetVal; #else throw new Exception("Not implemented"); #endif }
Warum nicht
public static int ExecuteFunc(MyApp, string Param) { #if (V1Debug || V1Release) int i = MyApp.MyFunc(Param); return i; #elif (V2Debug || V2Release) NameSpaceX.SpecialClass Retval = MyApp.MyNewFunc(Param); return Retval.IntRetVal; #else #error Not implemented #endif }
-
Das es diese Anweisung gibt wußte ich nicht. Dann schlägt der Fehler schon zur Compilezeit ein. Danke.
-
Gibt übrigens auch #warning, auch sehr praktisch zum Markieren von TODOs o.ä.
-
Danke für den Tip