DLL verwenden?
-
std::string in einem dll-Interface zu haben ist schonmal grundsätzlich eine ganz schlechte Idee weil wieder Compilerspezifisch. Auch wenn du sowieso schon wegen der Klassenexport Sache an einen bestimmten Compiler gebunden bist, in dem Fall gehts sogar so weit dass der selbe Compiler (MSVC) bei nur unterschiedlichen Flags (Welche Runtime Library verwendet wird) schon verschiedene Implementierungen von std::string verwendet. Wenn die dll und exe nicht mit exakt der selben Runtime gebuildet werden dann wird das Ding dazu neigen bei der leichtesten Brise zu crashen...
-
@dot: Irgendwie ist das ein wenig am Ziel vorbei. Du magst recht haben mit den DLL Interfaces etc. aber er versucht meiner Ansicht nach nur eine bestehende Library zu verwenden.
@Fragesteller:
Ich nehme an es handelt sich um die TagLib Library:
http://developer.kde.org/~wheeler/taglib.htmlSind da für Windows nicht Bsp. drin?
Simon
-
theta schrieb:
@dot: Irgendwie ist das ein wenig am Ziel vorbei. Du magst recht haben mit den DLL Interfaces etc. aber er versucht meiner Ansicht nach nur eine bestehende Library zu verwenden.
Das ist mir klar, ich hab ihm ja nur erklärt wo es dabei Probleme gibt und wie sie zu Lösen sind und ihm davon abgeraten sowas mal selbst zu machen...
-
vielen Dank euch beiden! Also, ich kann mit der tag.lib und tag.dll die Beispieldateien von taglib einwandfrei kompilieren und ausführen
Nur ein Problem habe ich noch...undzwar will Winamp mein Plugin einfach nicht laden...Wenn ich mein Projekt nicht als DLL, sondern als EXE (mit einer standart main-Funktion) ausgeben lasse und diese ausführe, läuft alles wunderbar, der Tag einer Testdatei wird gelesen und ich kann ihn ausgeben lassen.
Nur wenn ich das Projekt als DLL ausgeben lasse und diese (zusammen mit der tag.dll und zlib1.dll) in das Plugins-Verzeichnis von Winamp kopiere, läd Winamp es einfach nicht. Es gibt keine Fehlermeldung o. Ä., das Plugin wird auch nicht in den Einstellungen angezeigt. Kommentiere ich die Zeile
TagLib::FileRef f(file);aus, wird das Plugin wieder geladen...
Hängt das jetzt auch mit std::string zusammen? Als EXE läuft es, als DLL nicht? oO
Frohe Weihnachten!
MartinEDIT: wieso wird hier das Wort "standard" mit t hinten zensiert? oO
-
okay, ich habe die Lösung gefunden. tag.dll und zlib1.dll müssen im Winamp-Verzeichnis sein, nicht in Winamp\Plugins. Nunja ich habe dem Linker jedoch nur mitgeteilt, dass er tag.lib und zlib.lib benutzen soll...keine Rede von den dll-Dateien. Kann man dieses Verhalten mit einer Linker-Option ändern, die ich nicht gefunden habe?
Martin
-
Lädt er es wirklich nicht oder startet er es nur nicht weil es irgendwo abstürzt? Probier mal in der DllMain eine MessageBox() zu machen oder so...
inspire schrieb:
EDIT: wieso wird hier das Wort "standard" mit t hinten zensiert? oO
Weil es Standard heißt und der Fehler so oft gemacht wird dass es manche Leute stört

-
Was für ein Verhalten genau willst du ändern? Die .lib Dateien sind in dem Fall Importlibs und die tun genau das: Einen Verweis auf die jeweilige dll in deiner exe machen.
-
Die MessageBox in der DllMain wird nur angezeigt, wenn tag.dll und zlib1.dll in \Winamp\ liegen, nicht in \Winamp\Plugins\...
Ah, die Verbindung zwischen lib- und dll-Dateien hat mir gefehlt! Danke

Ich meine folgendes Verhalten:
Ich möchte die dll-Dateien in ein andere Verzeichnis legen, z.B. Winamp\Plugins\PluginABC\ und nicht einfach in das Winamp-Verzeichnis. Die libs einfach in einen Unterordner Plugins\PluginABC\ zu packen und dorthin zu linken hat geklappt, hatte jedoch nicht den gewünschten Erfolg - Winamp sucht die dlls immernoch im root-Verzeichnis.Morgen mache ich weiter, gute Nacht!
-
Wie gelinkt wird und wo die DLL sucht sind zwei verschiedene Themen.
Lies doch einfach die Doku von Winamp wo der seine DLLs sucht.Simon
Edit:
BTW: Ich denke Du hast zwei Probleme (und mischt diese ev. noch). Einerseits gings um die verwendung der TagLib und andererseits um dein eigenes WinAmp Plugin in Form einer DLL. Jetzt sind wir beim zweiten Problem angelangt, wenn ich dich richtig verstehe. Also: Guck bei WinAMP in der Plugin SDK.
-
werde da mal schauen, vielen Dank für eure Hilfe!