Fehler wenn ich round benutze
-
Also dieser Fehler kommt im allgemein davon, dass man z.b. einen Header hat, wo eine Funktion deklariert ist (zum Beispiel):
int round(float f);Dem Programm fehlt nun aber der dazugehörige .cpp Teil, bzw. der Bodyteil der Funktion. Das ist ja nur eine Headerdefinition.
Mein Problem ist, wie gesagt, dass ich nicht weiss woher du dieses round hast. Im Standard C, C++ und der MFC gibt es, soweit ich weiss, kein round. Also hast du das wohl aus einem Header, welcher bei einer DLL mitgeliefert wurde. Damit es nun funktioniert, musst du die Lib der DLL, und die DLL selbst in dein Projekt einbinden. Also in dein Projektordner kopieren. Ich glaube die Lib muss im Projektordner sein und die DLL im Debug/Release Ordner, sofern du mit VS arbeitest.
Dann musst du noch unter den Eigenschaften deines Projekts, bzw. deiner Solution, unter Linker->Input->Additional Dependencies den Namen der Lib dazufügen. Du kannst übrigens die Lib auch im Standardordner belassen und einfach dann noch unter Linker->General->Additional Library Directories den Pfad angeben, wo der Compiler, bzw. Linker, nach weiteren Libs suchen soll, welche für dein Projekt benötigt werden.
War das soweit verständlich?

Grüssli
-
Verständlich ja, nur weiß ich jetzt nicht genau welche Pfade/Bilbiotheken ich benutzen muss. Im moment includiere ich math.h mit #include. Welche Library muss ich jetzt einbinden und wo finde ich die?
MfG
Luke
-
In math.h gibt es allerdings kein round. Das round kommt von irgendwo anders. Wie gesagt, dass musst du wissen. Hast du womöglich in einem Header ein round definiert und kein Body dazugesetzt?
Grüssli
-
Ich hab nirgends round definiert, ich dachte das wär standard. Ich hab jetzt versucht eine von diesen rounds zu verwenden, aber da krieg ich immer nur 0 zurück! Auch meine eigene kleine round-funktion
double round( double d ) { return floor( d + 0.5 ); }liefert komischerweise immer nur 0 zurück. N plan warum?
Edit: Daran kann's ja nicht liegen. Der fehler liegt vorher im Code
-
Die 0 kommt aus der Rechnung, hier der Code
double recentPspVolume; recentPspVolume = (recentVolume/255)*53;Warum ist recentPspVolume immer 0?
-
Es ist zum Mäusemelken! Gebt euch das:
int recentVolume; double recentPspVolume; char send_buffer[192]; recentVolume = SendMessage(plugin.hwndParent, WM_WA_IPC, -666, IPC_SETVOLUME); // Holt sich die Lautstärke von Winamp wsprintf(send_buffer, "Volume is now %i", recentVolume); MessageBox(plugin.hwndParent,send_buffer,"",MB_OK); // MsgBox; Asugabe: "Volume is now 82" recentPspVolume = (recentVolume/255)*53; wsprintf(send_buffer, "PSP-volume is now %d", recentPspVolume); MessageBox(plugin.hwndParent,send_buffer,"",MB_OK); // // MsgBox; Asugabe: "PSP-volume is now 0"Ich kapier's nicht
-
(int / int) * int = int

Schreib doch mal die Rechnung so:
recentPspVolume = (recentVolume / 255.0) * 53.0;Das .0 bewirkt, dass die Zahl nicht als int, sondern als double angesehen wird. Wenn du sie als float möchtest, dann müsstest du folgendes machen:
(recentVolume / 255.0f) * 53.0f;Das .0f bewirkt, dass die Zahl als float angesehen wird

Grüssli
-
double recentPspVolume = (static_cast<double>(recentVolume) / 255.0) * 53.0;?
-
Super! Das hat mich schon mal nen entscheidenden Schritt weitergebracht! Danke!
Aber ich krieg noch fehler:
error C2065: 'static_cast': nichtdeklarierter Bezeichner
error C2059: Syntaxfehler: 'Typ'
-
Hmm programmierst du in C oder was? Wenn ja dann ersetz static_cast<double>(recentVolume) durch (double)recentVolumn

-
Hm, google hilft mir nicht wirklich weiter. Was genau ist der unteschied zwischen nem static_cast und nem einfachen typecast?
Edit: Crosspost

-
naja static_cast hast du unter C nicht zur verfügung ... da musst du nen C-Style-Cast nehmen ...
double recentPspVolume = (((double)recentVolume) / 255.0) * 53.0;
-
Ok, danke für eure Hilfe. Eine letzte Frage noch (und ja, haut mich ruhig für mein Newbie-tum). Ich will das Double in eine char[256] Variable packen. Dafür mach ich
wsprintf(send_buffer, "PSP-volume is now %lf", recentPspVolume);aber ich bekomm nur "PSP-volume is now f" raus. Wie stell ich's richtig an?
-
Auch mit
wsprintf(send_buffer, "PSP-volume is now %.2f", recentPspVolume);
und
wsprintf(send_buffer, "PSP-volume is now %2.10f", recentPspVolume);
nur
"PSP-volume is now f"
Ich versteh's nicht
edit: Jetzt hab ich folgendes versucht:
char *send_buffer; int pspVolumeDecPointPos, pspVolumeDecPointSign; recentPspVolume = round(13.6); send_buffer = _fcvt(recentPspVolume, 1, &pspVolumeDecPointPos, &pspVolumeDecPointSign);Und jetzt kackt er in der Laufzeit mit der Meldung "The variable 'send-buffer' is being used without being defined"