 |
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 |
TimesChange
Anmeldungsdatum: 20.11.2013 Beiträge: 85
|
Verfasst am: 07.02.2014, 18:59 Titel: Aufruf von Win-API-Funktionen im Konsolenmodus? |
|
|
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 |
|
 |
dkl FreeBASIC-Compiler-Entwickler
Anmeldungsdatum: 25.04.2010 Beiträge: 14 Wohnort: Germany
|
Verfasst am: 07.02.2014, 19:10 Titel: |
|
|
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 |
|
 |
TimesChange
Anmeldungsdatum: 20.11.2013 Beiträge: 85
|
Verfasst am: 07.02.2014, 21:47 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.02.2014, 22:17 Titel: |
|
|
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.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
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.
|
|