Guten Abend! Ich bin gerade dabei, ein Plugin (*.dll) für Winamp zuschreiben. Das Plugin funktioniert auch schon sehr gut. Jetzt möchte ich es um einen Thread erweitern, der dazu dienen soll, eine Funktion einige Sekunden verzögert auszuführen. Ich habe irgendwie das Gefühl, dass ich mich dabei recht dumm anstelle. In C# hat es vor einiger Zeit super geklappt. Ich habe in der Datei "AssemblyInfo.cpp" using namespace System::Threading; eingefügt. In der Initfunktion möchte ich dann (wie in der MSDN) den Thread deklarieren: Thread^ oThread = gcnew Thread( gcnew ThreadStart( &ThreadExample::ThreadProc ) ); Beim Kompilieren bringt er jedoch die Fehlermeldung "Error C2061: Syntaxfehler: Bezeichner 'Thread'". Der Compiler kennt also den "Thread" nicht als Datentyp. Ich habe schon viel gesucht und ausprobiert. Aus irgendeinem Grund will er aber die Deklaration nicht akzeptieren. Vielleicht kann mir jemand etwas weiterhelfen. Ich hoffe, ich habe die benötigten Infos angegeben. Lg Raphael
kann man denn überhaupt eine dll für winamp mit .net programmieren? Ja das was du machst ist kein C++, sondern c++.net.
@Sven: Ja - das scheint tatsächlich auf den ersten Blick zu funktionieren. Weshalb ist das notwendig? @Peter II: Also das Plugin funktioniert einwandfrei. War ein Demo-Plugin von Winamp, das ich an meine Bedürfnisse angepasst habe.
Raphael M. schrieb: > Peter II: Also das Plugin funktioniert einwandfrei. War ein Demo-Plugin > von Winamp, das ich an meine Bedürfnisse angepasst habe. > In C# hat es vor einiger Zeit super geklappt. warum machst du es dann nicht wieder in c#?
Weil ich das fertige Winamp-Plugin nur bearbeite. Keine Ahnung, ob man das auch in C# umstricken kann.
Hm - jetzt wirds sehr seltsam: Ich möchte eine MP3 verzögert abspielen. Der Thread funktioniert jetzt soweit - das habe ich mit einer Messagebox getestet. Das ist der Inhalt meines Threads (zuerst 5 Sek. warten, dann Musik abspielen) System::Threading::Thread::Sleep(5000); //MessageBox(NULL, L"TESSSSSSSSST.", L"", MB_OK); mciSendString(L"open c:\\sound.mp3 alias mySound wait", NULL, 0, 0); mciSendString(L"play mySound from 0", NULL, 0, 0); Wie gesagt - der Thread wird aufgerufen und wartet brav seine 5 s ab, um den Code anschließend auszuführen. Allerdings wird kein Sound abgespielt. Wenn ich die beiden letzten Zeilen (mciSendString) in die Funktion kopiere, die den Thread startet, wird der Sound abgespielt. Woran kann denn das liegen?!
Raphael M. schrieb: > Weil ich das fertige Winamp-Plugin nur bearbeite. Und ist das, was Du da als Grundlage nimmst, nun C++ oder "C++/CLI" bzw. "Managed C++"? Tauchen bereits im vorliegenden Quelltext diese .Net-Dinge (mit ^) auf?
Raphael M. schrieb: > Hm - jetzt wirds sehr seltsam: > > Ich möchte eine MP3 verzögert abspielen. Der Thread funktioniert jetzt > soweit - das habe ich mit einer Messagebox getestet. > > Das ist der Inhalt meines Threads (zuerst 5 Sek. warten, dann Musik > abspielen) > > System::Threading::Thread::Sleep(5000); > //MessageBox(NULL, L"TESSSSSSSSST.", L"", MB_OK); > mciSendString(L"open c:\\sound.mp3 alias mySound wait", NULL, 0, 0); > mciSendString(L"play mySound from 0", NULL, 0, 0); > > Wie gesagt - der Thread wird aufgerufen und wartet brav seine 5 s ab, um > den Code anschließend auszuführen. Allerdings wird kein Sound > abgespielt. Du solltest auf jeden Fall prüfen ob die MCI-Funktionen einen Fehler zurückgeben. > Wenn ich die beiden letzten Zeilen (mciSendString) in die Funktion > kopiere, die den Thread startet, wird der Sound abgespielt. > > Woran kann denn das liegen?! Also ich würde mal raten dass MCI nicht in dem Sinne Thread-fähig ist, wahrscheinlich muss da die Messageloop laufen - die ist per Thread. Um eine Message von Thread A zu Thread B zu schicken sind dann Verrenkungen nötig, genau wie bei normalen Fenster-Messages. Die Doku sollte dazu etwas sagen.
Rufus Τ. Firefly schrieb: > Und ist das, was Du da als Grundlage nimmst, nun C++ oder "C++/CLI" bzw. > "Managed C++"? > Tauchen bereits im vorliegenden Quelltext diese .Net-Dinge (mit ^) auf? Das Plugin ist das Demoplugin von dieser Seite: http://wiki.winamp.com/wiki/Beginner's_Basic_Plugin_Guide Dort kann man es auch - ohne es herunterzuladen - einsehen. Das Projekt in Visual C++ wird wie folgt neu erstellt: C++ -> CLR -> Class Library Ich vermute, dass es sich um normalen C++ Code handelt, richtig?!
Das sieht in der Tat nach richtigem C++ aus, und nicht nach der MS-Mutation "Managed C++/CLI".
Das bedeutet für mich, ich kann das Threading anders machen? Wobei es so wie ich es habe - .Net spezifisch - jetzt jedenfalls funktioniert.
Jasch schrieb: > Also ich würde mal raten dass MCI nicht in dem Sinne Thread-fähig ist, > wahrscheinlich muss da die Messageloop laufen - die ist per Thread. Um > eine Message von Thread A zu Thread B zu schicken sind dann Verrenkungen > nötig, genau wie bei normalen Fenster-Messages. Die Doku sollte dazu > etwas sagen. Genau mein Gedanke. Vielleicht blockiert der MCI-Aufruf auch nicht bis die Nachricht gesendet wurde und die zweite Nachricht überholt die erste.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.