Wie herausfinden, auf welchem OS man ist...
Das mit den defines ist schon klar, die braucht man (oder die LCL) ja dauernd.Christian hat geschrieben: Das kann mans aber grösstenteils mit defines machen
Die Diskussion oben ging aber drum, das man es zur Laufzeit rausfinden will.
Dafür gibt es kaum einen Grund, es sei denn, man wolle für XP und Win2k oder SuSE und Ubuntu verschiedenen Code schreiben. Dafür stellt FPC meines Wissens keine allgemeinen Bordmittel zur Verfügung.
-
- Beiträge: 13
- Registriert: Sa 16. Jun 2007, 18:47
... da habt ihr natürlich auffallend recht, dass das irgendwie nicht wirklich viel Sinn macht, wenn man ohnehin gezielt compilieren muss.. da schwebte ich wohl noch zu sehr in der Welt der "Virtual Machines" und Konsorten... 
Der Hinweis über die Defines oder auch die Sysinfo - Struktur ist aber sehr interessant, danke soweit!

Der Hinweis über die Defines oder auch die Sysinfo - Struktur ist aber sehr interessant, danke soweit!
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
result:= GetSystemVar('varname');
findet sich in Sysutils. Den String muß man allerdings parsen. Dann bekommt man allerdings ne Menge über das OS raus. Niemand hindert dich daran, z.B. eine kardinale Variable zu belegen:
if (pos('Windows', result) = 1) then begin
OSCounter:= os_win32;
end
else....
allerdings muß man dann vorher ein Set anlegen:
type
OSTypeSet = (os_win32, os_win64, os_lin386, os_lin686, ...);
OSType = os_win32..os_blabla;
Nun kannst du unter var dekalrieren:
var
PresentOSType: OSType;
und weil der kardinal ist in einer:
case OSType of
os_win32:{blabla};
os_win64:{blabla];
...
end; // of case
Den OsType abfragen und zur Laufzeit entscheiden welcher Code benutzt werden soll.
PASCAL ist halt super, wenn man weiß wie...
findet sich in Sysutils. Den String muß man allerdings parsen. Dann bekommt man allerdings ne Menge über das OS raus. Niemand hindert dich daran, z.B. eine kardinale Variable zu belegen:
if (pos('Windows', result) = 1) then begin
OSCounter:= os_win32;
end
else....
allerdings muß man dann vorher ein Set anlegen:
type
OSTypeSet = (os_win32, os_win64, os_lin386, os_lin686, ...);
OSType = os_win32..os_blabla;
Nun kannst du unter var dekalrieren:
var
PresentOSType: OSType;
und weil der kardinal ist in einer:
case OSType of
os_win32:{blabla};
os_win64:{blabla];
...
end; // of case
Den OsType abfragen und zur Laufzeit entscheiden welcher Code benutzt werden soll.
PASCAL ist halt super, wenn man weiß wie...

Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)