DLL verwenden?



  • Hi,

    ich versuche nun seit Stunden, die Bibliothek "taglib" unter Windows mit Visual Studio 10 zum laufen zu bekommen. Nach dieser Anleitung habe ich mir eine DLL-Datei erstellt - doch wie verwende ich sie nun?

    Ich habe die DLL im Projektordner liegen und mit

    HINSTANCE m_hInst;
    m_hInst = ::LoadLibrary((LPCWSTR)"taglib.dll");
    

    versucht, sie einzubinden. Das scheint noch zu funktionieren, doch wenn ich nun etwas wie

    TagLib::FileRef f(file);
    

    ausführe, hagelt es Fehlermeldungen:

    1> Bibliothek "C:\Users\martin\Desktop\gen_WinampControlServer\Release\gen_WinampControlServer.lib" und Objekt "C:\Users\martin\Desktop\gen_WinampControlServer\Release\gen_WinampControlServer.exp" werden erstellt.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A00017F) ""public: __thiscall TagLib::FileName::FileName(char const *)" (??0FileName@TagLib@@$$FQAE@PBD@Z)", auf das in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A000182) ""public: __thiscall TagLib::FileName::~FileName(void)" (??1FileName@TagLib@@$$FQAE@XZ)", auf das in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalDestroy>(class TagLib::FileName *)" (?<MarshalDestroy>@FileName@TagLib@@$$FSMXPAV12@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A000183) ""public: __thiscall TagLib::FileName::FileName(class TagLib::FileName const &)" (??0FileName@TagLib@@$$FQAE@ABV01@@Z)", auf das in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalCopy>(class TagLib::FileName *,class TagLib::FileName *)" (?<MarshalCopy>@FileName@TagLib@@$$FSMXPAV12@0@Z)" verwiesenwird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A00038C) ""public: virtual __thiscall TagLib::FileRef::~FileRef(void)" (??1FileRef@TagLib@@$$FUAE@XZ)", auf das in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A00038D) ""public: __thiscall TagLib::FileRef::FileRef(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (??0FileRef@TagLib@@$$FQAE@VFileName@1@_NW4ReadStyle@AudioProperties@1@@Z)", auf das in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall TagLib::FileRef::~FileRef(void)" (??1FileRef@TagLib@@$$FUAE@XZ)" in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileRef::FileRef(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (??0FileRef@TagLib@@$$FQAE@VFileName@1@_NW4ReadStyle@AudioProperties@1@@Z)" in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileName::FileName(char const *)" (??0FileName@TagLib@@$$FQAE@PBD@Z)" in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileName::FileName(class TagLib::FileName const &)" (??0FileName@TagLib@@$$FQAE@ABV01@@Z)" in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalCopy>(class TagLib::FileName *,class TagLib::FileName *)" (?<MarshalCopy>@FileName@TagLib@@$$FSMXPAV12@0@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileName::~FileName(void)" (??1FileName@TagLib@@$$FQAE@XZ)" in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalDestroy>(class TagLib::FileName *)" (?<MarshalDestroy>@FileName@TagLib@@$$FSMXPAV12@@Z)".
    1>C:\Users\martin\Desktop\gen_WinampControlServer\Release\gen_WinampControlServer.dll : fatal error LNK1120: 10 nicht aufgelöste externe Verweise.

    Würde mich über Tipps sehr freuen 🙂
    Martin



  • Zum Thema "Problem Lösen durch Cast", weil

    LoadLibrary((LPCWSTR)"taglib.dll");
    

    schlicht falsch ist:

    Benutze Entweder:

    LoadLibrary(L"taglib.dll");
    

    oder noch besser:

    LoadLibrary(_T("taglib.dll"));
    

    Google danach was L"" und _T("") machen. Bei der _T("") Lösung ist der Header tchar.h nötig.

    Falls eine Konvertierung zur Laufzeit nötig ist:
    http://www.c-plusplus.net/forum/260205-10
    http://www.c-plusplus.net/forum/277250

    Simon

    Edit:
    Zum eigentlich Problem:
    Es sieht so aus, als würdest Du die Funktionen aus der DLL so benutzen wie wenn sie dazugelinkt würde, was sie aber nicht ist ➡ Linker Fehler
    Ich schlage vor Du machst folgendes:
    1. Lib der DLL bei den Linker Settings eintragen
    2. Den LoadLibrary(..) Aufruf weglassen, der ist dann nämlich überflüssig.

    Falls das Ziel wirklich ist, die DLL dynamisch mit LoadLibrary(..) zu laden, kannst Du die exportierten Funktionen nicht einfach so benutzen (der Linker kennt sie nicht), sondern musst mit GetProcAddress(..) die Adressen der jeweiligen Funktionen erfragen.



  • Sehe ich das richtig dass in dieser Dll Klassen exportiert wurden die du jetzt verwenden willst!? Das Exportieren von Klassen ist eine rein compilerspezifische Komfortfunktion. dlls an sich unterstützen nur einfache Funktionen, alles weitere bastelt sich der Compiler dann daraus irgendwie zusammen. Das hat zweierlei wichtige Konsequenzen. Erstens geht das alles natürlich nur wenn dll und Anwendung mit dem selben Compiler erstellt werden. Und zweitens kannst du eine solche dll nicht zur Runtime mit LoadLibrary() laden sondern nur zur Loadtime über eine import lib.



  • Ohje, ich hab das Gefühl, da eine Menge durcheinanderzubringen. Der LoadLibrary-Befehl ist jetzt weg.

    Also, bei Visual Studio ist unter Projekt>...-Eigenschaften>Konfigurationseigenschaften>Linker>Eingabe>Zusätzliche Abhängigkeiten die datei libtaglib.a eingetragen. Die liegt zusammen mit der DLL im Projektordner bei den *.cpp und *.h Dateien. Doch nun bekomme ich diese Fehlermeldungen:

    1>WinampControlServerSocket.cpp(27): error C2653: 'TagLib': Keine Klasse oder Namespace
    1>WinampControlServerSocket.cpp(27): error C2065: 'FileRef': nichtdeklarierter Bezeichner
    1>WinampControlServerSocket.cpp(27): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'f'
    1>WinampControlServerSocket.cpp(27): error C3861: "f": Bezeichner wurde nicht gefunden.

    Die Header-Datei der Bibliothek mit #include "taglib/tag.h" einzubinden hat leider auch keinen Erfolg gehabt. Daraufhin werden nämlich noch weitere Header-Dateien benötigt - und wenn ich die mit #include einbinde (und in den Projekteinstellungen die Pfade dazu bei den zusätzlichen Imclude-Verzeichnissen eintrage, bekomme ich wieder Linker-Fehler:

    1> Bibliothek "C:\Users\martin\Desktop\gen_WinampControlServer\Release\gen_WinampControlServer.lib" und Objekt "C:\Users\martin\Desktop\gen_WinampControlServer\Release\gen_WinampControlServer.exp" werden erstellt.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A00017F) ""public: __thiscall TagLib::FileName::FileName(char const *)" (??0FileName@TagLib@@$$FQAE@PBD@Z)", auf das in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A000182) ""public: __thiscall TagLib::FileName::~FileName(void)" (??1FileName@TagLib@@$$FQAE@XZ)", auf das in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalDestroy>(class TagLib::FileName *)" (?<MarshalDestroy>@FileName@TagLib@@$$FSMXPAV12@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A000183) ""public: __thiscall TagLib::FileName::FileName(class TagLib::FileName const &)" (??0FileName@TagLib@@$$FQAE@ABV01@@Z)", auf das in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalCopy>(class TagLib::FileName *,class TagLib::FileName *)" (?<MarshalCopy>@FileName@TagLib@@$$FSMXPAV12@0@Z)" verwiesenwird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A00038C) ""public: virtual __thiscall TagLib::FileRef::~FileRef(void)" (??1FileRef@TagLib@@$$FUAE@XZ)", auf das in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2028: Nicht aufgelöstes Token (0A00038D) ""public: __thiscall TagLib::FileRef::FileRef(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (??0FileRef@TagLib@@$$FQAE@VFileName@1@_NW4ReadStyle@AudioProperties@1@@Z)", auf das in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)" verwiesen wird.
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall TagLib::FileRef::~FileRef(void)" (??1FileRef@TagLib@@$$FUAE@XZ)" in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileRef::FileRef(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (??0FileRef@TagLib@@$$FQAE@VFileName@1@_NW4ReadStyle@AudioProperties@1@@Z)" in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileName::FileName(char const *)" (??0FileName@TagLib@@$$FQAE@PBD@Z)" in Funktion ""public: void __thiscall WinampControlServerSocket::SendCover(struct HWND__ *)" (?SendCover@WinampControlServerSocket@@$$FQAEXPAUHWND__@@@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileName::FileName(class TagLib::FileName const &)" (??0FileName@TagLib@@$$FQAE@ABV01@@Z)" in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalCopy>(class TagLib::FileName *,class TagLib::FileName *)" (?<MarshalCopy>@FileName@TagLib@@$$FSMXPAV12@0@Z)".
    1>WinampControlServerSocket.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall TagLib::FileName::~FileName(void)" (??1FileName@TagLib@@$$FQAE@XZ)" in Funktion ""public: static void __clrcall TagLib::FileName::<MarshalDestroy>(class TagLib::FileName *)" (?<MarshalDestroy>@FileName@TagLib@@$$FSMXPAV12@@Z)".
    1>C:\Users\martin\Desktop\gen_WinampControlServer\Release\gen_WinampControlServer.dll : fatal error LNK1120: 10 nicht aufgelöste externe Verweise.

    dot, meinst du, dass mein Vorhaben gar nicht klappen kann, da die DLL- und a-Dateien mit MinGW erzeugt wurden, ich sie jetzt aber mit dem Visual Studio-Compiler verwenden will?



  • inspire schrieb:

    dot, meinst du, dass mein Vorhaben gar nicht klappen kann, da die DLL- und a-Dateien mit MinGW erzeugt wurden, ich sie jetzt aber mit dem Visual Studio-Compiler verwenden will?

    Natürlich, das kann sogar aus zweierlei Gründen nicht gehen. Erstens kann Visual Studio keine .a linken da .a ein anderes Object File Format ist (nämlich das was GCC verwendet) und selbst wenn würde das nicht gehen da Klassenexport ein rein compilerspezifisches Feature ist. Schon allein das Verwenden der Klasse aus der dll geht also nur wenn dll und exe mit dem selben Compiler erstellt werden, davon dass MSVC natürlich mit einem von GCC erstellten .a nix anfangen kann ganz abgesehen.



  • Ah okay, verstehe. Habe nun aus taglib nochmal mit CMake ein neues Visual Studio Projekt erzeugt und das im Release-Modus kompiliert, wodurch ich die Dateien tag.dll, tag.lib und tag.exp erhalten habe. Beim Kompilieren traten ein paar Warnings auf, doch keine Errors.

    Die Warnings:

    1>C:/Users/martin/Desktop/taglib-1.6.3/taglib/toolkit\tfile.h(48): warning C4251: 'TagLib::FileName::m_name': class 'std::basic_string<_Elem,_Traits,_Ax>' erfordert eine DLL-Schnittstelle, die von Clients von class 'TagLib::FileName' verwendet wird
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>,
    1>              _Ax=std::allocator<char>
    1>          ]
    1>C:/Users/martin/Desktop/taglib-1.6.3/taglib/toolkit\tfile.h(49): warning C4251: 'TagLib::FileName::m_wname': class 'std::basic_string<_Elem,_Traits,_Ax>' erfordert eine DLL-Schnittstelle, die von Clients von class 'TagLib::FileName' verwendet wird
    1>          with
    1>          [
    1>              _Elem=wchar_t,
    1>              _Traits=std::char_traits<wchar_t>,
    1>              _Ax=std::allocator<wchar_t>
    1>          ]
    1>mpeg\mpegproperties.cpp(224): warning C4244: '=': Konvertierung von 'double' in 'int', möglicher Datenverlust
    1>ogg\vorbis\vorbisproperties.cpp(176): warning C4244: '=': Konvertierung von '__int64' in 'int', möglicher Datenverlust
    
    1>toolkit\unicode.cpp(158): warning C4244: '=': Konvertierung von 'Unicode::UTF32' in 'Unicode::UTF8', möglicher Datenverlust
    1>toolkit\unicode.cpp(256): warning C4244: '=': Konvertierung von 'Unicode::UTF32' in 'Unicode::UTF16', möglicher Datenverlust
    1>toolkit\unicode.cpp(273): warning C4244: '=': Konvertierung von 'unsigned long' in 'Unicode::UTF16', möglicher Datenverlust
    
    1>flac\flacfile.cpp(486): warning C4800: 'int': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)
    

    (die Warnings "...erfordert eine DLL-Schnittstelle..." sind über 20 mal für die zwei Stellen aufgetreten, ich hab sie hier aber mal rausgenommen, da es sonst zu viel Text wird.)

    Jedenfalls konnte ich die tag.lib-Datei nun beim Linker zu meinem Projekt hinzufügen. tag.lib und tag.dll liegen im Projektverzeichnis. Um das Projekt nun zu kompilieren, benötigte ich noch die includes:

    #include <tag.h>
    #include <fileref.h>
    

    sonst gibt es Errors ('TagLib': Keine Klasse oder Namespace, 'FileRef': nichtdeklarierter Bezeichner).

    So bekomme wird nun auch mein Projekt kompiliert - endlich! Die Warnings dabei lauteten jedoch ebenfalls:

    1>C:\Users\martin\Desktop\gen_WinampControlServer\gen_WinampControlServer\taglib\toolkit\tfile.h(48): warning C4251: 'TagLib::FileName::m_name': class 'std::basic_string<_Elem,_Traits,_Ax>' erfordert eine DLL-Schnittstelle, die von Clients von class 'TagLib::FileName' verwendet wird
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>,
    1>              _Ax=std::allocator<char>
    1>          ]
    1>C:\Users\martin\Desktop\gen_WinampControlServer\gen_WinampControlServer\taglib\toolkit\tfile.h(49): warning C4251: 'TagLib::FileName::m_wname': class 'std::basic_string<_Elem,_Traits,_Ax>' erfordert eine DLL-Schnittstelle, die von Clients von class 'TagLib::FileName' verwendet wird
    1>          with
    1>          [
    1>              _Elem=wchar_t,
    1>              _Traits=std::char_traits<wchar_t>,
    1>              _Ax=std::allocator<wchar_t>
    1>          ]
    

    Bei den Warnings habe ich mir nichts gedacht und wollte es so benutzen. Das Projekt wird ebenfalls als DLL-Datei ausgegeben, da es ein Winamp-Plugin sein soll. Die erzeugte dll habe ich nun zusammen mit der tag.dll in das Verzeichnis Winamp\Plugins kopiert - doch Winamp will das Plugin einfach nicht laden. Erst wenn ich die Zeile

    TagLib::FileRef f(file);
    

    auskommentiere, wird das Plugin geladen :|

    Nunja, ich vermute mal, das liegt an den ganzen Warnings...oder habe ich schon wieder etwas anderes falsch gemacht?



  • 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.html

    Sind 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!
    Martin

    EDIT: 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!


Anmelden zum Antworten