Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Frage zu den Windows Funktionen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 06.06.2008, 19:00    Titel: Frage zu den Windows Funktionen Antworten mit Zitat

Hallo,
Ich hab mal eine Frage, die ich mir eigentlich schon lange Stelle:
Wieso kann man Windows-Funktionen, wie z.B. sndPlaySound und andere so Aufrufen:
Code:

sndPlaySound (..., ...)

Obwohl es eine Function ist. Ich meine es müsste doch eine Sub sein, denn eine Funktion, denke ich, gibt immer einen Wert zurück.
Es müsste ja eigentlich so aussehen:
Code:

Variable = sndPlaySound(..., ...)

Oder liegt das nur daran das ich nicht lesen kann

Außerdem, wenn ich so diese Include-Dateien angucke, stelle ich fest das es nur sehr, sehr wenige Subs gibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.06.2008, 20:13    Titel: Antworten mit Zitat

Alle API-Funktionen liefern zurück, ob der API-Aufruf geklappt hat oder nicht, deswegen sind das alles Funktionen. FB hat aber glücklicherweise die Pflicht, den Rückgabeparameter der Funktion auszulesen, abgeschafft (das ging vorher nur mit CALL).
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 06.06.2008, 20:29    Titel: Antworten mit Zitat

Ah, jetzt versteh ich das!
Kann man solche Funktionen auch selber schreiben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.06.2008, 20:31    Titel: Antworten mit Zitat

ääh, ich weiß nicht so recht, ob du weißt, was die WinAPI ist, aber ich weiß, dass es eine Ansammlung von DLLs ist, die viele Kernfunktionen des Systems enthalten. und in FreeBASIC kann man genau so DLLs erstellen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 06.06.2008, 20:41    Titel: Antworten mit Zitat

Ja, klar weiß ich was eine WinAPI ist lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 06.06.2008, 21:40    Titel: Antworten mit Zitat

Nein, nicht eine, sondern die. Es gibt nur eine. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.06.2008, 08:38    Titel: Antworten mit Zitat

DIE WinAPI- eigentlich DAS WinAPI (API = Application programming interface) ist eine Sammlung von einigen tausend Funktionen, die auf die Systemfunktionen von Windows zugreifen und so die graphischen Programmoberflächen ermöglichen. Sie sind in den Dateien Kernel32.dll, User32.dll und GDI.dll untergebracht, die alle Teil von Windows sind. Um sie nutzen zu können, muß man die Datei windows.bi einbinden.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 07.06.2008, 10:26    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
... und so die graphischen Programmoberflächen ermöglichen. ...
Naaajaa ... eigentlich läst sich mit der WinAPI nicht nur grafische Zeug sonden, wohl das wichtigere, allgemein Programme für Windows schreiben. Schliesslich gehört zum Kernel auch der MemoryManager, auf dem die Progs zugreifen. *mal Allocate anprech*. Der Grafische teil ist im grunde nur ein "Bonus" der WinAPI.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.06.2008, 12:13    Titel: Antworten mit Zitat

Ja, hst schon Recht, ist aber eine Sache, auf die der Programmierer nur bedingt Eifluß hat. Ich habe das so geschrieben, damit sich ein WinAPI-Laie darunter überhaupt was vorstellen kann.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 07.06.2008, 12:18    Titel: Antworten mit Zitat

@Elektronix:
Alte, bekannte Frage:
das Interface
oder
die Schnittstelle
zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 07.06.2008, 16:05    Titel: Antworten mit Zitat

Is englisch .. daher "The WinAPI" durchgeknallt


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.06.2008, 18:03    Titel: Antworten mit Zitat

Korrekt müßte es "Das WinAPI" heißen (Interface heißt "Zwischengesicht" und hat damit das "Das" als Artikel). Eingebürgert hat sich aber "Die WinAPI".

@ThePuppetmaster
Allocate braucht nicht die WinAPI, sondern funktioniert auch unter DOS. Nur reagiert die Speicherzuweisung von Windows anders darauf.
Als weitere Funktion unter Windows gibt es noch die Zwischenablage (Clipboard) und das Multitasking (Eingabefocus), die auch mit "dem" WinAPI angesprochen werden.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 07.06.2008, 18:56    Titel: Antworten mit Zitat

Also .. Allocate braucht definitiv die API, da er mit der MMU kommunizieren muss, und die ist bestandteil des Kernels.

Die EINZIGSTE, die nicht zwingend auf die MMU angewiesen sind Treiber im Kenel Modus auf Level 1 oder höher. Sie erhaltenmeist über die Kernel-modus vom Systemkernel zugriff auf den Physikalischen Speicher, was jedes andere Programm nicht hat. Das Sieht man eigentlich auch schon daran das die Memory-Adressen durchgängig sind, nachdem man sie mit Reallocate redimensioniert hat. Wie sonst soll ein Zusammenhängernder speicherbereich hergestellt werden, ohne das man glecih MB's an Daten von einer ecke in die Andere schaufelt? ... Das Nennt man übrigens auch Paging.

Ohne Kernelzugriff wär es ja garnicht möglich Speicher zu reservieren, bzw diesen wieder frei zu geben. Heuzutage zumindest. Früher wars in der Tat relativ schelcht, wenn man den Speicher nicht wieder frei gab. Kenn ich noch gut aus den alten AMIGA Zeiten mit AMOS grinsen


Aber, wo wir grad dabei sind, auch wenns nicht zum Thema gehört. Weis einer von euch zufällig, wie ich unter Linux die VMAT auslesen kann?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 08.06.2008, 08:55    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:
Also .. Allocate braucht definitiv die API, da er mit der MMU kommunizieren muss, und die ist bestandteil des Kernels.

Die EINZIGSTE, die nicht zwingend auf die MMU angewiesen sind Treiber im Kenel Modus auf Level 1 oder höher. Sie erhaltenmeist über die Kernel-modus vom Systemkernel zugriff auf den Physikalischen Speicher, was jedes andere Programm nicht hat. Das Sieht man eigentlich auch schon daran das die Memory-Adressen durchgängig sind, nachdem man sie mit Reallocate redimensioniert hat. Wie sonst soll ein Zusammenhängernder speicherbereich hergestellt werden, ohne das man glecih MB's an Daten von einer ecke in die Andere schaufelt? ... Das Nennt man übrigens auch Paging.
Wie erklärt sich dann, das Allocate auch unter DOS funktioniert, wo es keine MMU gibt? Hat DOS etwas Vergleichbares?
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 08.06.2008, 13:02    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
Hat DOS etwas Vergleichbares?
Nop ...
.. unter DOS setzt der Compiler das anders um. Da wird ein Interrupt auf Int21h gecallt.
http://bbc.nvg.org/doc/Master%20512%20Technical%20Guide/m512techb_int21.htm

Allerdings ist die MMU eine Hardwarekomponente .. Sie existiert auf jedem Rechner.
Was du meinst, is wohl die VMAT ... Virtual Memory Allocation Table. Sie Existiert unter DOS nicht.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 08.06.2008, 21:16    Titel: Antworten mit Zitat

Ok, das mit der MMU hatte ich falsch verstanden. Wieder was dazugelernt grinsen .

Demnach braucht allocate doch nicht zwingend die WinAPI, sondern nur allemein ein OS, das den Zugriff auf die MMU ermöglicht.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 08.06.2008, 21:57    Titel: Antworten mit Zitat

Genau. In FBC ist "allocate" nur ein alias für "malloc" das je nach Umgebung entsprechend vom Compiler umgesetzt wird um speicher zu reservieren.

Ich bin mir jetzt auch nicht ganz sicher, aber ich glaube das das sogar soweit geht, das das Betriebssystem die MMU anweisen kann nur Kommandos vom OS entgegen zu nehmen, um eingriffe von anderen Programmen auf den Speicher zu verhinden.

Zumindest würde das auch erklären, warum ich einen Treiber im Kernel-Modus unter windows benöigen würde, um direkt den Speicher zu adressieren.

Ob das jedoch bei jedem OS so is, kann ich ncith mit sicherheit sagen.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 09.06.2008, 09:21    Titel: Antworten mit Zitat

Zum Titelthema: Siehe auch hier.

d.h. FreeBasic erlaubt offensichtlich ebenfalls aus C/C++ kommende Möglichkeit, eine Funktionsprodezur wahlweise als Funktion oder Anweisungsstatement aufzurufen - letzteres, wenn der Rückgabewert nicht mehr weiterverarbeitet werden soll.

Übrigens VBScript kennt diese Möglichkeit genauso, d.h. ich kann etwas mit Run() starten:
Code:
Set oSh = CreateObject("WScript.Shell")
oSh.Run "Calc"
Set oSh = Nothing

Wenn ich aber gerne noch den DOS-Errorlevel hätte, dann rufe ich Run() einfach als Funktion auf:
Code:
Set oSh = CreateObject("WScript.Shell")
lErrorLevel = oSh.Run("%comspec% /c mkdir Test", 7, True)
Set oSh = Nothing

Im ersten Beispiel entsteht intern natürlich ebenfalls ein Errorlevel-Rückgabewert, nur wird dieser ignoriert. Gegenüber QB habe ich es aber nicht nötig, dafür eine Dummy-Variable benützen zu müssen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.06.2008, 21:01    Titel: Antworten mit Zitat

[OT]
Elektronix hat Folgendes geschrieben:
eigentlich DAS WinAPI (API = Application programming interface

oh mann, das hatten wir schon mal, und es geht beides
das interface (warum auhc immer) - die oberfläche zwinkern
[/OT]
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 13.06.2008, 22:58    Titel: Antworten mit Zitat

@Jojo
Ich weiß ja nicht, warum Du jetzt im Thema so weit zurückspringst, wir waren doch eigentlich schon viel weiter.
Übrigens ist mit Interface nicht "die" (Progamm-)Oberfläche gemeint, sondern "die" Schnittstelle, nämlich die Bedienschnittstelle Mensch-Maschine.
Interface bedeutet (dem Wort nach) "Zwischengesicht" oder auch "Zwischenoberfläche"- soll wohl heißen "zwischen den Gesichtern", also eine Einrichtung, um die Kommunikation zwischen zwei verschiedenen Medien (Mensch-Maschine) zu ermöglichen.

Sicher geht beides. Aber nur, weil sich "die" WinAPI inzwischen allgemein eingebürgert hat. Grammatikalisch wäre das nur halbrichtig.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz