Aktuelle Zeit: 19.10.2019 19:52

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Betriebsystem unabhängig Programmieren mit PB
BeitragVerfasst: 22.12.2005 13:16 
Offline
Benutzeravatar

Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Wenn man Plattform übergreifend Programmieren will, so muss man sich an folgende Programmierregeln halten.

1.
Du schreibst einen Quelltext und den Kompilierst du mit PureBasic auf dem Betriebssystem deiner wahl. Als Beispiel z.B. mit Windows Kompiliert erhältst du eine *.exe die nur unter Windows lauffähig ist!
Nun nimmst du den selben Quelltext und den Kompilierst du auf dem Betriebssystem Linux.
Dadurch erhältst du ein Programm das nur unter Linux lauffähig ist!

Dasselbe machst du dann mit dem selben Quelltext, auf den Betriebsystemen MAC oder AMIGA.
Die dann auch nur unter MAC oder Amiga lauffähig sind.

2.
Wenn du z.B. eine Spezielle Funktion aus der Windows-API im Quelltext nutzen willst (Betriebsystem Spezifische Funktion),
funktioniert das Kompilieren nicht mehr unter den anderen Betriebsystemen !!!!
(Windows-API Befehle gibt es eben nur bei Windows)

Dafür gibt es in PureBasic die Befehle (Compilerdirektiven):
CompilerSelect #PB_Compiler_OS und
CompilerCase #PB_OS_xxxxxxxxx

Hier wird während der Kompilierung abgefragt, mit welchem Betriebsystem (auf dem PureBasic gerade läuft) Kompiliert werden soll.

Wenn du z.B. eine Windows-API Funktion nutzt,
aber auf dem Betriebsystem Linux Kompilierst,
so wird folgende Zeile einfach nicht mit kompiliert:
Code:
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_Windows
    ; MS Windows Spezielle Befehle:
    RegisterHotKey_( WindowID(Window), HOTKEY_WIN_W, 8, 87)
    UnregisterHotKey_(WindowID(Window), HotkeyID)
CompilerEndSelect


Wie Falko schrieb, kann man somit einfach, dann abhängig vom System, die passenden Quelltexte (Source-Code) Kompilieren.
Wenn man alle Betriebsystem abhängigen Prozeduren, in einzelnen Quelltexte, für die einzelnen Betriebsysteme zusammenlegt.
z.B Amiga.pbi , Linux.pbi, Mac.pbi, Windows.pbi.
Code:
CompilerSelect #PB_Compiler_OS
  CompilerCase #PB_OS_AmigaOS
    ; AmigaCode
    IncludeFile  "Amiga.pbi" ; Code der nur unter Amiga Kompiliert wird
  CompilerCase #PB_OS_Linux
    ; PinguinCode
    IncludeFile  "Pinguin.pbi" ; Code der nur unter Linux Kompiliert wird
  CompilerCase #PB_OS_MacOS
    ; ApfelCode
    IncludeFile  "Mac.pbi" ; Code der nur unter MAC Kompiliert wird
  CompilerCase #PB_OS_Windows
    ; FensterCode
    IncludeFile  "Windows.pbi" ; Code der nur unter Windows Kompiliert wird
CompilerEndSelect

Da eine unter Windows Kompilierte *.exe, niemals unter einem anderen Betriebsystem laufen wird (und umgekehrt), muss man im Quelltext mit den Compilerdirektiven entscheiden, was unter welchem OS ausgeführt werden soll.
Zur Laufzeit geht das daher nicht !!

_________________
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2005 16:30 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
Ersma: Danke für das Mini-Tut.
Zweitma: Wünsche frohes Fest gehabt zu haben :)

Wie sieht das denn mit Volumes und Slash/Backslash bei Pfaden aus ?

Für Win schreibt man ja c:\dev\egal\Beispiel

AFAIR nutzen die anderen drei "/" als Trenner.
Paßt PB das automatisch an ?

Und was mach ich mit Volumenamen ?
Ich finde zwar
- GetPathPart
- GetFilePart
- GetExtensionPart
aber kein "GetVolumePart"

Bei AOS wäre "c:\" normalerweise "sys:" oder "myboot:", was bei Linux und MacOS ?
Kann ich beim Coden vermeiden, den ganzen Volume-/Path-Krempel in eine CompilerSelect-Struktur zu packen ?

bis denne...
scholly

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2005 16:47 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Du kannst grundsätzlich Slashes verwenden, jedes neuere Windows kann
damit umgehen. Umgekehrt, können Linux usw. nicht mit Backslash
umgehen.

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2005 17:06 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
ts-soft hat geschrieben:
Du kannst grundsätzlich Slashes verwenden, jedes neuere Windows kann damit umgehen. .

Wäre für mich suboptimal.
Zum einen code ich primär auf einem alten W98er (weil mein XP meist mit TV-Aufnahmen und encoden beschäftigt ist), zum anderen will ich mir nicht noch einen Unterscheidungszwang per OSVersion auferlegen.

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2005 17:18 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Warum machste dann Deine TV-Aufnahmen nicht auch OS-Unabhängig :mrgreen:
Geht wahrscheinlich auch nicht so wie Du es Dir wünscht, genauso wirste
beim Programmieren immer Kompromisse eingehen müssen.

Am besten alle fixen Pfade am anfang des Codes per Compilerdirektive
bestimmen und im weiteren Verlauf mit den Variablen arbeiten.

Für dynamische Pfade ist dies ja nicht erforderlich, weil z.B. der
OpenFileRequester es bereits im richtigem Format zurückgibt.

//Edit
>> Bei AOS wäre "c:\" normalerweise "sys:" oder "myboot:", was bei Linux und MacOS ?
Was meinste mit "c:\" ?
Sowas kenne ich als Programmierer überhaupt nicht, könnte das SystemDrive sein, muß aber nicht :mrgreen:
Code:
Procedure.s GetEnv(szVariable.s)
  Protected Length.l, Buffer.s
  Length = GetEnvironmentVariable_(@szVariable, @Buffer, 0)
  If Length
    Buffer = Space(Length)
    GetEnvironmentVariable_(@szVariable, @Buffer, Length)
    ProcedureReturn Buffer
  EndIf
  ProcedureReturn ""
EndProcedure
Debug GetEnv("SystemDrive")

OS-Unabhängiges Programmieren, setzt natürlich die entsprechenden
Kenntnisse, für die man im allgemeinen mehrere Jahre braucht, in allen
OS-Spezifischen Dingen voraus.
Die Systemlaufwerke der anderen Betriebssysteme sind dann wohl auch entsprechend ihrer API festzustellen, könnte aber auch unveränderliche Werte sein.

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Zuletzt geändert von ts-soft am 25.12.2005 17:51, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 25.12.2005 17:49 
Offline
Benutzeravatar

Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf
ts-soft hat geschrieben:
Warum machste dann Deine TV-Aufnahmen nicht auch OS-Unabhängig :mrgreen:
Weil ich das nicht selber coden brauch, da ich mit der gefundenen Lösung bis auf ein paar unwichtige Kleinigkeiten zufrieden bin.
Ätsch. (OT: Suche smily, der feixend die Zunge rausstreckt :))
Zitat:
Geht wahrscheinlich auch nicht so wie Du es Dir wünscht, genauso wirste beim Programmieren immer Kompromisse eingehen müssen.
Das ist mir bewußt, wird mich aber nicht davon abhalten, Kompromisse als letzte Lösung in Erwägung zu ziehen :).
Zitat:
Am besten alle fixen Pfade am anfang des Codes per Compilerdirektive bestimmen und im weiteren Verlauf mit den Variablen arbeiten.
Für dynamische Pfade ist dies ja nicht erforderlich, weil z.B. der OpenFileRequester es bereits im richtigem Format zurückgibt.

Ok, werd ich ersma so machen, ma kucken, wie weit ich komme...
scholly

_________________
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye