PlaySound in DLL funzt nicht
-
moin Community! Ich habe in meiner DLL eine wav Ressource und möchte diese Abspielen. Das hier ist mein Code
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), hInstDll/*aus DllMain*/, SND_RESOURCE | SND_ASYNC);
Leider höre ich nichts, der selbe Code funktioniert aber in einer exe mit GetModuleHandle(NULL) natürlich.
-
Was sagt GetLastError?
-
The specified resource type cannot be found in the image file.
wie kann das sein, ich habe es doch als Ressource eingebunden wie in der exe auch
-
liegt es daran, dass ich die DLL in einen Prozess injecte?
-
Dann ist hInstDLL falsch!
-
was soll daran falsch sein?
HINSTANCE hInstDll; ... BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved) { hInstDll = hInst; return TRUE; }
-
Dann ist die Resource falsch!
-
bin ich blind?
http://img222.imageshack.us/img222/5188/unbenanntnxf.png
hab sie jetzt mal in IDR_WAVECLICK umbennant, klappt aber immernoch nicht, der selbe Error Code. Im oberen Projekt klappt die gleiche wav file.
-
stimmt doch alles. Ist das ein Bug in Visual Studio?
-
lad dir resource hacker und guck ob's in der dll drin ist. und lass dir hInstDll mal ausgeben um sicherzugehen das auch das drinsteht was drinstehen soll
-
Beginner987 schrieb:
stimmt doch alles. Ist das ein Bug in Visual Studio?
Wenn man selber nicht mehr weiterkommt ist es immer ein Bug im VS...
1. Untersuche die DLL ob wirklich die resource drin ist. (Im VS laden)
Ist die Ressource unter einem Namen oder der ID gespeichert?
2. Rebuild all machen umn zu kontrollieren ob evtl. die ID falsch ist.
-
hab schon 100 mal rebuild gemacht.
Gerade weil ich es mit VS geöffnet habe, finde ich das so seltsam.
WAVE->105->1031 die Wave ist drin.
-
mach mal ein CLEAN REBUILD und ansonsten ist hInstDll falsch! gib hInstDll doch mal aus!
-
ich meinte ja clean rebuild! hInstDll ist 268435456
-
BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
PlaySound(MAKEINTRESOURCE(IDR_WAVE1), hInst, SND_RESOURCE);
hInstDll = hInst;
return TRUE;
}
ich höre ja nichtmal so etwas, es scheint nicht zu funktionieren, da die dll injected wird
-
das ist klar das dein Beispiel nicht geht, in DllMain darf man nichts machen was andere DLLs lädt.
-
ups, ich habe in dem Beispiel SND_ASYNC vergessen, da dacht ich mir, teste es halt mal ohne dem! Und siehe da es klappt! Von jeder Codestelle. Aber ich will nicht 20 Sekunden warten, bis es zurückkommt, dann setze ich dafür nen neuen Thread auf
-
bin immernoch bei dem Problem, ohne ASYNC klappt alles und wenn ich das hinzufüge klappt nichts mehr... bitte helft mir
-
oder gibt es noch eine andere Möglichkeit wavs asynchron aus der ressource abzuspielen außer PlaySound? Ich finde es so hässlich nen Thread für PlaySound zu machen
-
Dir wurde bereits gesagt, dass man in DllMain nicht "alles" machen darf.
Dazu gehört eben auch PlaySound. Schon ganz und gar wenn diese DLL durch CreateRemoteThread geladen wird.Zudem: Warum spielst Du den Sound aus der anderen Anwendung. Das kanst Du auch in Deiner Anwednung machen. Den Unterschied hört der user nicht