Source code |
|
1 2 3 4 5 6 |
Der alte Code: // get file info SendMessage( plugin.hwndParent, WM_WA_IPC, (WPARAM)&basicFileInfo, IPC_GET_BASIC_FILE_INFO ); //Zerlegen in song und artist artist = strtok( basicFileInfo.title, "-" ); song = strtok( NULL, "\0" ); |
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
//Zerlegen in song und artist char buffer3[_MAX_FNAME]; char buffer4[_MAX_FNAME]; strcpy(buffer3,basicFileInfo.title); song = strstr(buffer3, " - "); strncpy(buffer4, buffer3, (int)(song - buffer3)); artist = &buffer4; song = song + 3; |
Das könnte Probleme bereiten. Possible solution: buffer3 und buffer4 als globale Variablen in deinem Plugin erklären. Dann bleiben sie solange bestehen, wie das Plugin lebt.Quoted
Original von oixio
Source code
1 2 3 4 5 6 7 8 9 10 11 12 //Zerlegen in song und artist char buffer3[_MAX_FNAME]; char buffer4[_MAX_FNAME]; strcpy(buffer3,basicFileInfo.title); song = strstr(buffer3, " - "); strncpy(buffer4, buffer3, (int)(song - buffer3)); artist = &buffer4; song = song + 3;
This post has been edited 1 times, last edit by "oixio" (Dec 9th 2004, 11:07am)
Ich hab das schon verstanden, aber was ich eigentlich vermute ist, dass Winamp den Segfault abfängt und dein Plugin killt, weil der Zeiger ungültig ist. Ist aber nur ne Vermutung. Generell ist die Wiederverwertung keine schlechte Idee, obwohl ich mir nicht vorstellen kann, dass die Allokation wirklich zu lange dauert.Quoted
Original von oixio
Du hast mein Problem glaub ich nicht so ganz verstanden. Das mit dem Null-Pointer ist gelöst dadurch. Nur scheint es jetzt langsamer zu laufen. Mein Problem ist, das Winamp das Plugin anscheinent "killt" beim beenden, so dass es nicht mehr bis zum ende ausgeführt wird und das Display abschalten kann. deshalb vermute ich mal, die Schleife arbeitet zu langsam, so dass das Winamp zu lange dauert und es das Plugin einfach abricht anstatt es ordentlich zu beenden.
Trotzdem schonmal danke für deine Antwort.
Edit:
Ich glaub ich seh grad was du meinst. Du glaubst das Reservieren des Speichers dauert so lange und ich soll ihn "wiederverwerten"? Ich werds heute abend mal testen..
Sonst noch wer ne Idee?
This post has been edited 1 times, last edit by "MAX" (Dec 9th 2004, 3:12pm)
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Globale Variablen & Co init () //schaltet das Display ein unsigned long __stdcall ThreadProc2( void* v ) { //Variablen & Co while( ThreadActive ) { //Titelinfos & Co von Winamp holen // get file info SendMessage( plugin.hwndParent, WM_WA_IPC, (WPARAM)&basicFileInfo, IPC_GET_BASIC_FILE_INFO ); << Hier ist dann mein obiger Code >> //Die Sachen aufm Display darstellen } //ClearLCD und so was } quit() //schaltet das display aus und beendet das Plugin |
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// get file info SendMessage( plugin.hwndParent, WM_WA_IPC, (WPARAM)&basicFileInfo,IPC_GET_BASIC_FILE_INFO ); //Zerlegen in song und artist int c = 0; artist = basicFileInfo.title; for( song = artist; *song; song++) { if(c==0 && *song==' ') c=1; else if(c==1 && *song=='-') c=2; else if(c==2 && *song==' ') { c=3; break; } else if(c>0) c=0; } if(c==3) *(song-2)=0; |
Quoted
Gibt es evtl eine äquivalente Funktion zu strtok, nur mit dem Unterschied, das nicht nach einem Zeichen sondern nach 3 Zeichen gesucht wird? Oder hat villeicht jemand eine Idee wie man das mit strtok und dann einer eigenen Abfrage nach den Zeichen vor und hinter dem "-" machen kann?
This post has been edited 1 times, last edit by "MAX" (Dec 10th 2004, 2:30pm)
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include <string> #include <stdio.h> #include <iostream> char string[] = "Karl-Heinz - Lied von Kalle"; char seps[] = " "; char *token; int main( void ) { printf( "Tokens:\n" ); /* Establish string and get the first token: */ token = strtok( string, seps ); while( token != NULL ) { /* While there are tokens in "string" */ if ( strcmp(token, "-") == 0 ) break; printf( " %s\n", token ); /* Get next token: */ token = strtok( NULL, seps ); } token = strtok( NULL, seps ); while( token != NULL ) { /* While there are tokens in "string" */ printf( " %s", token ); /* Get next token: */ token = strtok( NULL, seps ); } //Damit das Fenster nicht sofort geschlossen wird char c; std::cin >> c; } |
This post has been edited 2 times, last edit by "MAX" (Dec 10th 2004, 3:05pm)
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <string> #include <iostream> int main( void ) { using namespace std; string strInterprUndLied ("Karl-Heinz - Lied von Kalle"); string strInerpreter; string strLied; string strStringToFind(" - "); string::size_type strPosToFind = strInterprUndLied.find(strStringToFind); strInerpreter = strInterprUndLied.substr(0, strPosToFind); strLied = strInterprUndLied.substr(strPosToFind + strStringToFind.length(), strInterprUndLied.length()); cout << "Interpreter: " << strInerpreter << "\n"; cout << "Lied: " << strLied << "\n"; //Damit das Fenster nicht sofort geschlossen wird char c; std::cin >> c; } |
This post has been edited 1 times, last edit by "MAX" (Dec 10th 2004, 3:21pm)