 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Ryko
Anmeldungsdatum: 02.01.2013 Beiträge: 12
|
Verfasst am: 02.01.2013, 19:23 Titel: Boolean in FreeBasic ? |
|
|
Hallo FreeBasic Community,
Ich bin neu hier im Forum und auch neu in FreeBasic.Ich komme eigentlich von VB.Net,aber dennoch zieht es mich zu FreeBasic.Da es in FreeBasic ja noch keine vordefinierte Klassen(wie in VB.net z.B. Process Klasse etc.) gibt,wollte ich mich wenn ich schon mit FB anfang gleich mal mit der WinApi ausseinander setzten und habe mir dazu auch gleich ein Buch dafür gekauft(Beispiele sind in C++,sind aber einfach umzuschreiben).Jedoch gibt z.B. die DeleteFile() Methode ein Boolean zurück aber wie ich gesehen hab gibt es den DatenTyp in FB (noch) nicht?Wie würde man denn die DeleteFile Methode sonst aufrufen?
Edit:/ scheint irgendwie doch zu gehen^^
Code: | Dim bSucces As Boolean = DeleteFile(ExistingFile)
If bSucces = TRUE Then
Print "Erfolgreich"
Else
Print "Nicht Erfolgreich"
EndIf |
Hoffe ihr könnt mir da Helfen
Mit Freundlichen Grüßen Ryko |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 02.01.2013, 19:38 Titel: |
|
|
Hi Ryko,
willkommen im Forum und in der FreeBASIC-Welt!
FreeBASIC bietet zwar keine Klassenbibliothek wie .net-Sprachen oder Java, hat dafür aber viele grundlegende Funktionen bereits als Befehle im Sprachumfang. Beispielsweise zum Löschen, Bearbeiten, Umbenennen, ... von Dateien benötigst du weder Klassen noch WinAPI-Funktionen. Die nötigen Befehle gehören einfach schon zum Standard-"Wortschatz" von FB.
Zum Löschen einer Datei verwendet man daher normalerweise den KILL-Befehl (siehe Befehlsreferenz).
Grundsätzlich kann man auch alles mögliche mit WinAPI-Aufrufen selber erledigen. Das hat aber natürlich den Nachteil, dass sich dein Programm dann unter Linux nicht mehr compilieren und ausführen lässt. Wenn du hingegen FreeBASICs eigenen KILL-Befehl verwendest, geht das auf allen Plattformen, auf denen FreeBASIC läuft.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Ryko
Anmeldungsdatum: 02.01.2013 Beiträge: 12
|
Verfasst am: 02.01.2013, 19:48 Titel: |
|
|
Hallo Sebastian,
Erstmal Danke für die Antwort.Ich weis schon von den vordefinierten Befehlen bei FB aber ich bin eben dabei dieses Buch abzuarbeiten und versuche dann eben von C++ auf Fb zu übersetzen und ich konnte irgendwie keinen Boolean Datentyp finden deshalb die Frage .
Also schönen Abend noch  |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 02.01.2013, 20:49 Titel: Re: Boolean in FreeBasic ? |
|
|
Ryko hat Folgendes geschrieben: | ..Jedoch gibt z.B. die DeleteFile() Methode ein Boolean zurück aber wie ich gesehen hab gibt es den DatenTyp in FB (noch) nicht?Wie würde man denn die DeleteFile Methode sonst aufrufen?.. |
Was macht ein (vbxyz-)Programmierer, wenn es für sein Problem keine Lösung gibt?
Er schreibt sie sich selber: Code: | Type Boolean
As Byte 'sinnvoller wäre allerdings Integer
End Type |
Damit wäre dann möglich: Code: | Dim As Boolean b1, Yes, No, Allowed, Tool8 | und als Schnellschuß(ungetestet)noch hinterher: Code: | Function IsBoolean(What As Integer) As Boolean
Return IIf(What, True, False)
End Function | Wenn in diesem Code Fehler auftreten, solltest du dein Buch beiseite legen und in der deutschen Hilfe(läßt sich auch herunterladen) nachsehen..
..und wenn du schon mal auf dem FB-Portal bist, könntest du dich dort auch mal umschauen.
Gerade für Neulinge sollte egtl. immer etwas Interessantes zu finden sein^^
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 02.01.2013, 23:46 Titel: |
|
|
Wie du bemerkt hast, gibt es in FreeBasic keinen "bool" bzw Boolean Datentyp - genauso wie in C (nicht jedoch C++).
Die WinAPI ist für C ausgelegt und wenn du genau in der Dokumentation von DeleteFile nachschaust, wirst du feststellen, dass dort nicht "bool", sondern "BOOL" als Rückgabewert angegeben ist (man beachte, dass Groß/Kleinschreibung in C/C++ beachtet wird und dies zwei verschiedene Bezeichner sind).
Wie schon gesagt, gibt es in C keinen bool; aber man kann sich einen "BOOL" definieren - und genau dies geschieht in der "windef.h" (bzw. "windef.bi" für FreeBasic) (Auszug): Code: | typedef int BOOL;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif |
Ebenso werden hier (falls noch nicht anderswo definiert) "TRUE" und "FALSE" definiert. Wie du siehst entspricht FALSE dem Wert 0. Alle Werte ungleich 0 sind üblicherweise TRUE; dies kann man jedoch mit Integer Datentypen nicht so definieren, wodurch man hier einfach TRUE mit 1 definiert.
Wie du siehst kann FALSE exakt definiert werden - TRUE hingegen nicht. Und da die Beschreibung von DeleteFile TRUE so auffasst, wie ich vorhin erklärt habe:
MSDN Referenz hat Folgendes geschrieben: | If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero (0). |
Darum wäre es besser wenn du nicht auf "bSucces = TRUE" prüfen würdest, sondern stattdessen auf "bSucces <> FALSE", da bSucces ja nur ungleich 0 sein muss, jedoch nicht unbedingt den Wert "1" haben muss. _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 03.01.2013, 21:26 Titel: |
|
|
FreeBasic "missbraucht" wie praktisch alle BASIC-Dialekte Integer als Boolean. Dabei gelten alle Werte <> 0 (vorzugsweise -1) als TRUE, 0 selber als FALSE.
Am besten
Code: | Const FALSE As Integer = 0
Const TRUE As Integer = Not FALSE |
verwenden.
Und übrigens genügt
anstelle von
Code: | If bSuccess = TRUE Then |
Letzteres ist wie der "weisse Schimmel", also unnötiger Vergleich, da IF .. THEN bekanntlich Boolean (bzw. als Boolean genutzter Integer) selber erwartet. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|