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:

Aufruf von Win-API-Funktionen im Konsolenmodus?

 
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
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 07.02.2014, 18:59    Titel: Aufruf von Win-API-Funktionen im Konsolenmodus? Antworten mit Zitat

Ich habe hier ein kleines Beispiel, dass mir einen Win-Systemton spielt, wenn das Programm (z.B. mit Screenres) im Grafikmodus läuft:

Code:
#include once "windows.bi"

   declare function PlaySound alias "PlaySoundA" (byval as LPCSTR, byval as HMODULE, byval as DWORD) as BOOL

   screenres 640, 180
   PlaySound("SystemHand", NULL, 0)
   sleep
End


Ohne SCREENRES liefert mir der Compiler einen Fehler (undefined reference...).
Kann ich das durch manuelles Einfügen fehlender Definitionen beheben, so dass auch im Konsolenmodus PLASOUND möglich ist?

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dkl
FreeBASIC-Compiler-Entwickler


Anmeldungsdatum: 25.04.2010
Beiträge: 14
Wohnort: Germany

BeitragVerfasst am: 07.02.2014, 19:10    Titel: Antworten mit Zitat

PlaySound() stammt laut MSDN aus der winmm.dll, also einfach #inclib "winmm" einfügen, und es sollte gehen, da FB auch hoffentlich die richtige libwinmm.dll.a mitbringt. Die meisten header Dateien (z.B. windows.bi & co) machen das für einen sodass man es nicht selbst machen muss, aber wenn man Funktionen selber deklariert, muss man eben auch darauf achten die richtigen libraries beim Linken mit einzubeziehen.

Bei ScreenRes wird die libwinmm.dll.a automatisch vom fbc mit einbezogen, weil das FB graphics library die intern selber braucht. In dem Fall hat man dann Glück gehabt, dass das Problem der fehlenden Bibliothek nicht aufgetaucht ist.

Übrigens scheint FB schon die vorgefertigte win/mmsystem.bi header zu haben, die auch schon eine PlaySound Deklaration beinhaltet. Du könntest also wohl auch einfach #include once "win/mmsystem.bi" machen und dir die manuelle Deklaration ersparen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 07.02.2014, 21:47    Titel: Antworten mit Zitat

Danke, beide vorgeschlagenen Varianten funktionieren.

Die gesamten erforderlichen Deklarationen direkt im Programm unterzubringen macht keinen Sinn?
Denn irgendeinen "Nachteil" muss das Einbinden ja haben, sonst könnte man ja standardmäßig alle verfügbaren *.bi Dateien bzw. Bilbliotheken einbinden...

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 07.02.2014, 22:17    Titel: Antworten mit Zitat

Zum Einen werden dadurch jede Menge Symbolnamen belegt, die man sonst selbst verwenden könnte (z.B. möchte vielleicht jemand seine Funktion PlaySound nennen und benutzt WinMM gar nicht), außerdem würde natürlich der Kompiliervorgang extrem verlangsamt werden, wenn zunächst jede BI-Datei eingebunden und übersetzt werden muss, obwohl sie gar nicht benötigt wird.
Zumal steigt mit der Einbindung aller möglichen Bibliotheken auch die Chance, dass irgendwelcher Müll in dein Programm reingelinkt wird, den du gar nicht brauchst, und dann steigt der Speicherverbrauch um mehr als nur ein paar MB. zwinkern
_________________
» 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
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
Seite 1 von 1

 
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