Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 06.06.2008, 19:00 Titel: Frage zu den Windows Funktionen |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.06.2008, 20:13 Titel: |
|
|
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 |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 06.06.2008, 20:29 Titel: |
|
|
Ah, jetzt versteh ich das!
Kann man solche Funktionen auch selber schreiben? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.06.2008, 20:31 Titel: |
|
|
ää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 |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 06.06.2008, 20:41 Titel: |
|
|
Ja, klar weiß ich was eine WinAPI ist  |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.06.2008, 21:40 Titel: |
|
|
Nein, nicht eine, sondern die. Es gibt nur eine.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 07.06.2008, 08:38 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.06.2008, 10:26 Titel: |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 07.06.2008, 12:13 Titel: |
|
|
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 |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 07.06.2008, 12:18 Titel: |
|
|
@Elektronix:
Alte, bekannte Frage:
das Interface
oder
die Schnittstelle
 _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.06.2008, 16:05 Titel: |
|
|
Is englisch .. daher "The WinAPI"
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 07.06.2008, 18:03 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 07.06.2008, 18:56 Titel: |
|
|
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
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 08.06.2008, 08:55 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 08.06.2008, 13:02 Titel: |
|
|
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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 08.06.2008, 21:16 Titel: |
|
|
Ok, das mit der MMU hatte ich falsch verstanden. Wieder was dazugelernt .
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 08.06.2008, 21:57 Titel: |
|
|
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 09.06.2008, 09:21 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.06.2008, 21:01 Titel: |
|
|
[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
[/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 |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 13.06.2008, 22:58 Titel: |
|
|
@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 |
|
 |
|