PlaySound in DLL funzt nicht
-
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
-
Martin Richter schrieb:
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
Auch nicht, wenn er ein absolutes Gehör hat?
-
ich mache es nicht in DllMain sondern in einer Funktion die ich aufrufe. Und der loader injected nur schnell die dll und beendet sich dann mehr nicht das geht also nicht und ich will nicht den Prozess vom loader immer laufen haben
-
Beginner987 schrieb:
ich mache es nicht in DllMain sondern in einer Funktion die ich aufrufe.
Und wer ruft die Funktion auf? DllMain?
-
ne natürlich nicht, in DllMain ist ein return TRUE und die zuweisung an die hInstance, die Funktion ruft der loader auf. Mich wundert dass ohne async alles perfekt klappt und mit nicht
-
Wie rufst Du die Funktion aus dem Lader auf!
Zudem wnen der Lader in diesem Moment noch geladen ist, warum spielst Du nicht den Sound aus dem Lader, wie ich es schon gesagt habe.
Jetzt verstehe ich gar nichts mehr!
-
das ist der DLL Injection Code: http://wiki.hackerboard.de/index.php/DLL-Injection
und der Sound wird natürlich nicht sofort wenn die dll injected wird abgespielt, sondern erst etwas später. (Was aber nichts dran ändern würde, wenn ich es sofort als 1. Anweißung in der dll abspiele, klappt es auch nicht mit async)
-
.. schrieb:
das ist klar das dein Beispiel nicht geht, in DllMain darf man nichts machen was andere DLLs lädt.
... der größte quatsch, den ich je gelesen habe....
-
Na dann les mal...
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583The entry-point function should perform only simple initialization or termination tasks. It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions),