Portable Compilierung Windows -> Mac Os
-
templäd schrieb:
- gibt es eine Betriebssystemunabhängige Lösung zu "GetLogicalDriveStrings"? Nein
- gibt es eine Betriebssystemunabhängige Alternative zur WinApi "MessageBox"? Nein
GrüßeWenn die Funktion absolut unabhängig sein muss stimmt das.
Aber evtl. findet sich dazu eine einfach Portierbare Lösung in Qt oder den wxWidgets.
-
dark-eye schrieb:
Aber evtl. findet sich dazu eine einfach Portierbare Lösung in Qt oder den wxWidgets.
Richtig. Mit GUI Frameworks machbar.
Würde für die 2 Funktionen aber irgendwas 'unsauberes' mit #ifdef machen.
Wie kann es eigentlich sein, dass man nur MessageBox braucht?
Du rufst doch nicht MessageBox aus ner Konsolenanwendung auf?
-
templäd schrieb:
Wie kann es eigentlich sein, dass man nur MessageBox braucht?
Du rufst doch nicht MessageBox aus ner Konsolenanwendung auf?Dazwischen sei noch ein „etwa“ eingefügt. Denn sowas tut man nie nie nie niemals.
Und wozu brauchst du GetLogicalDriveStrings? Auf Unix-Systemen gibt es da kein „echtes“ Äquivalent zu.
-
hallo,
erstmal danke für die Antworten.
GetLogicalDriveStrings benötige ich für die Filesuche um zb alle Partitionen auf denen gesucht werden kann zu bekommen.Messagebox deswegen weil über kurz oder lang das Programm keine Konsolenanwendung werden soll sondern im Hintergrund laufen mit möglichen Nachrichten die Aufpopen.
thx
-
geneticZ schrieb:
hallo,
erstmal danke für die Antworten.
GetLogicalDriveStrings benötige ich für die Filesuche um zb alle Partitionen auf denen gesucht werden kann zu bekommen.Was meinst du mit „Suche“? Wenn das nur relativ nebensächlich ist, solltest du dafür unter OS-X Spotlight benutzen (Dokumentation zur API sollte XCode beiliegen). Ansonsten tut's tut's ein /, darunter liegt alles was das Dateisystem hergibt.
geneticZ schrieb:
Messagebox deswegen weil über kurz oder lang das Programm keine Konsolenanwendung werden soll sondern im Hintergrund laufen mit möglichen Nachrichten die Aufpopen.
Dafür wäre beim Mac Growl angebracht, unter Linux libnotify. Sowas gibt's doch bestimmt auch für Windows. Eine MessageBox würde einfach nur nerven (erst Recht bei etwas, was im Hintergrund läuft).
-
.filmor schrieb:
Was meinst du mit „Suche“? Wenn das nur relativ nebensächlich ist, solltest du dafür unter OS-X Spotlight benutzen (Dokumentation zur API sollte XCode beiliegen). Ansonsten tut's tut's ein /, darunter liegt alles was das Dateisystem hergibt.
Was ich mit Suche meine: Das ganze Programm ist ein Filesearch mit der Hilfe von Boost-Libs (filesystem.hpp), weil der Code ja portabel sein soll.
Es gibt dort ja einen Einstiegspunkt, eine Pfadangabe, wo die Suche beginnen soll.bfs::path my_path("c:\\");
Nehmen wir an das gesuchte File ist aber auf Drive D:\, dann hab ich hier ein Problem.
Das selbe Programm habe ich auch schonmal nur für Windows geschrieben mit der Hilfe von WinApi.char buffer[1024]; string pfad; const DWORD result(GetLogicalDriveStringsA(1024, buffer)); if (result > 1024) { cerr << "FEHLER: Buffer zu klein!"; return 1; }//if... else if (result == 0) { cerr << "FEHLER: Kein Laufwerk gefunden!"; return 1; }//else... for (char* ptr_item = buffer; *ptr_item; ptr_item += strlen(ptr_item) + 1) { string currDrive(ptr_item); if((fileSearch.setDrive(currDrive))) break; }//for...
Hier werden mit GetLogicalDriveStrings die vorhandenen Drives auf dem Computer ermittelt und dann in einer For-Schleife einzelnt an die Suche weitergegeben.
Wenn File gefunden gibts ein return true und ein break in der For-Schleife.
Somit werden alle vorhandenen Drives nach dem gesuchten File durchgearbeitet.Sowas benötige ich nun Plattformübergreifend. Ich hab eigentlich gehofft es gäbe in Boost auch einen Header für sowas, hab aber leider nichts gefunden
Danke im Voraus
geneticZ
-
geneticZ schrieb:
Nehmen wir an das gesuchte File ist aber auf Drive D:\\
Und nehmen wir zudem an das es "Laufwerke" in dem Sinn wie unter Windows gibt. In Unix sieht das wieder anders aus. Wenn ich mir z.B. Linux betrachte werden alle Laufwerke in das Dateisystem gemappt (So kann es z.B. sein das dein Verzeichnis "D:" unter Linux der Pfad "\usr" ist...). Daher kann es keine portable Entsprechung deines Befehles geben.
cu André
-
asc schrieb:
Und nehmen wir zudem an das es "Laufwerke" in dem Sinn wie unter Windows gibt. In Unix sieht das wieder anders aus. Wenn ich mir z.B. Linux betrachte werden alle Laufwerke in das Dateisystem gemappt (So kann es z.B. sein das dein Verzeichnis "D:" unter Linux der Pfad "\usr" ist...). Daher kann es keine portable Entsprechung deines Befehles geben.
cu André
Ok, wie sieht dann eine Lösung für mein Problem aus?
-
geneticZ schrieb:
Ok, wie sieht dann eine Lösung für mein Problem aus?
Es gibt keine plattformübergreifende Lösung. Du musst einfach für jede Zielplattform anderen Code schreiben und dann dafür sorgen, dass unter der Haube der korrekte Code verwendet wird. Entweder per Präprozessor oder zur Laufzeit.
-
Ganz so tragisch wie sich das anhört (besonders bei asc) ist es nicht. Es ist tatsächlich ziemlich einfach:
#ifdef WINDOWS // kA wie genau das heißt, find's heraus für alle Laufwerke { durchsuche (Laufwerk); } #elif POSIX durchsuche ("/"); #endif
-
Das sollte ihm eigentlich alles nicht neu sein:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1526345.html#1526345 ...
-
minhen schrieb:
Das sollte ihm eigentlich alles nicht neu sein:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1526345.html#1526345 ...Nicht neu, aber dennoch problemmatisch für mich sonst würde ich ja nicht Fragen oder?
Sowas bekommt man nunmal nicht einfach so in einer C++ Vorlesung gelehrtDanke für eure Hilfe vor allem an filmor, das klappt schonmal soweit!
Ich hoffe ich darf später trotzdem noch Fragen stellen, die mit sicherheit noch aufkommen werden (vor allem bezüglich Mac Os)
-
geneticZ schrieb:
Nehmen wir an das gesuchte File ist aber auf Drive D:\, dann hab ich hier ein Problem.
Es gibt auf einem UNIX kein "D:\", alle gemounteten Partitionen werden unterhalb von "/" eingebunden. Wechsellaufwerke werden unter MacOS X in "/Volumes/..." gemountet. Unter normalen Umständen kann es Dir herzlich egal sein, welche Partition wo im Dateisystem eingebunden ist. Du solltest besser schreiben was Du erreichen willst, bei einem UNIX macht man vieles ganz anders.
P.S. Aufpoppende Fenster für ein Programm im Hintergrund kommen auf einem UNIX gar nicht gut. Normalerweise schreibt man einen Daemon und loggt Nachrichten über einen Systemdienst. Dieser Dienst kümmert sich dann um alles weitere.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.