![]() |
Wav-Dateien aus Dll laden - Kein Sound
Hi,
ich habe für mein Programm, welches diverse Wave-Dateien zum Abspielen benötigt, eine Dll Datei erstellt, in der genau diese Wave-Dateien sind. Nachdem die Dll erfolgreich erstellt wurde, wollte ich diese mithilfe meines Programmes folgendermaßen aufrufen:
Code:
Da dieser Versuch scheiterte, ist mir aufgefallen, dass die Dll Datei nirgendwo geladen wird. Also habe ich bei FormCreate die Dll so geladen:
PlaySound(PChar(200), Dll, SND_ASYNC [b]or[/b] SND_MEMORY [b]or[/b] SND_RESOURCE);
[color=#000080][i]// die 200 ist die Indexzahl, die in er .rc Datei festgelegt wurde[/i][/color]
Code:
Unter public habe ich noch die Variable festgelegt:
[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]begin[/b] DLL := LoadLibrary('Sound.dll'); [b]end[/b];
Code:
Dies hat aber auch nicht funktioniert...kann mir da jemand helfen? Ich habe keine Fehlermeldung bekommen, sondern die Wav-Datei wurde einfach nicht abgespielt.
[b]public[/b]
Dll : HINST; Gruß Yheeky |
Moin Yheeky,
ich bin jetzt zwar nicht mit PlaySound so besonders vertraut, aber wenn ich mir die Doku dazu mal ansehe, komme ich zu dem Schluss, dass sich SND_MEMORY und SND_RESOURCE ausschliessen. (mag ein Irrtum sein). Versuch's also mal ohne SND_MEMORY. Prinzipiell kann es recht nützlich sein bei der Verwendung von API Funktionen, die's nicht so tun wie erwartet, sich mal den letzten Fehler anzeigen zu lassen. Auch wenn bei der Funktion nichts spezielles dokumentiert ist, kann das helfen. Also einfach mal
Code:
direkt hinter die PlaySound Zeile.
ShowMessage(SysErrorMessage(GetLastError));
oder
Code:
Vielleicht gibt das ja näheren Aufschluss.
[b]if[/b] [b]not[/b] PlaySound(...) [b]then[/b]
[b]begin[/b] ShowMessage(...); [b]end[/b]; |
Hi Yheeky,
das PSDK sagt dazu: Zitat:
Zitat:
MfG, d3g |
@Christian: Also der Tipp war wirklich gut. Ich habe jetzt zwei Fehlermeldungen auslesen können (mit Stringschreibweise und ohne - z.B. '20' als Index oder 20 als Index):
Code:
@d3g: Wie schon im oberen Teil erwähnt...hat nichts geholfen. Durch eine Veränderung der Schreibweise änderte sich nur die Art der Fehlermeldung, aber der Sound wurde trotzdem nicht abgespielt.
1. Der angegebene Ressourcentyp wurde nicht in der Image-Datei gefunden.
2. Die angegebene Image-Datei enthält keinen Ressourcenabschnitt Ich hoffe auf weitere Tipps :D ... Gruß Yheeky |
Moin Yheeky,
schön, dass es zumindest zum Einkreisen geholfen hat. Hast Du auch schon versucht SND_MEMORY wegzulassen? Ach ja, hast Du eigentlich auch überprüft, ob LoadLibrary überhaupt ein gültiges Handle zurückgeliefert hat (<> 0)? Falls nicht, siehe Tip 1 ;-) Einen hab' ich noch: Probier mal statt PChar(200)
Code:
Dies entspricht zwar eigentlich PAnsiChar(200) und somit PChar(200) aber man kann ja nie wissen ;-)
MAKEINTRESOURCE(200)
BTW: d3g meinte nicht, dass Du die ID als String übergeben sollst, sondern statt der ID den Namen der Resource zu benützen. |
Also die Dll Datei wird richtig geladen. Ich bekomme die Meldung "Der Vorgang wurde erfolgreich beendet.".
SND_MEMORY habe ich auch mal weggelassen, funktioniert aber nicht. Vielleicht liegt mein Fehler ja schon in der Res-Datei. Ich habe eine Textdatei erstellt und die dort einzubindenden Dateien so aufgelistet: 200 WAVE "Sound.wav" Ist doch richtig so, oder? RCDATA und WAV hatte ich auch schon versucht, klappt aber auch nicht. Ich bin wirklich ratlos...ich hatte das schonmal hinbekommen, aber jetzt will es nicht mehr funktionieren. Wie man schon oben an dem Textdateieintrag sehen kann, ist die ID 200 als String "200" oder habe ich das jetzt falsch verstanden? Achja...MAKEINTRESOURCE funktioniert auch nicht :cry: Gruß Yheeky |
Moin Yheeky,
unter dem Titel "Playing WAVE Resources" habe ich im PSDK noch etwas gefunden. Die Deklaration in der .RC Datei müsste so aussehen SoundName WAVE c:\sounds\sound.wav wobei SoundName der Name ist, der dann mit PChar('SoundName') angegeben werden kann, WAVE die Kennung für eine .WAV Resource ist, und c:\sounds\sound.wav die Datei angibt. Da die Resource bei Dir ja, wie ich vermute, auch mit Deiner Deklaration ohne Meckermeldung eingebunden wurde, wurde zum einen die ID 200 akzeptiert, zum anderen die einzubindende Datei gefunden. Also sollte die Resource als solche OK sein. Eine Möglichkeit, die mir noch einfällt ist
Code:
Durch das # wird angegeben, dass es sich um eine Resourcen ID handelt, und nicht um einen Resourcennamen.
PlaySound(PChar('#200'), Dll, SND_ASYNC [b]or[/b] SND_RESOURCE);
|
Also ich habe eben noch ein altes Programm gefunden, in dem ich das auch mal versucht hatte. Damals habe ich ein String statt einer ID verwendet und siehe da...dann geht´s jetzt auch in meinem neuen Programm.
Deine Idee mit dem # ist interessant. Werde ich mal testen... Danke für die Hilfe! Gruß Yheeky |
Re: Wav-Dateien aus Dll laden - Kein Sound
Ich habe das auch mal versucht umzusetzen, allerdings funktioniert es nicht :(
Die Wave-Datei in die *.Dll zukompilieren ist kein Problem, nur der Aufruf klappt nicht. ... könntest du vielleicht mal den Code posten? |
Re: Wav-Dateien aus Dll laden - Kein Sound
was heißt denn "funktioniert nicht"? hast du dir mal den Fehler ausgeben lassen wie oben beschrieben?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz