DLL's ausliefern



  • Nachdem ich mir jetzt die neue Code::Blocks Version geladen habe, habe ich auch endlich mal meine ganzen DLL-Projekte compiliert. Es funktioniert auch alles wunderbar, meine Frage ist jetzt nur, da ich die DLL anderen Programmierern zur Verfügung stellen will, was ich da alles mit rausgeben muss? Also auf alle Fälle die *.lib, die *.dll, die *.obj und eben die Headerdatei mit den Defines der Funktionen. Aber mir war so, als ob es dabei einen Hacken gab, wenn der nächste die Dateien mit einen anderen Compiler benutzen will, als mit dem die Dateien erstellt wurden. Irre ich mich da und was muss ich noch beachten?



  • Wenn ich eine Bibliothek will, dann will ich .dll, .lib und .h. Die Objektdatei interessiert mich weniger.

    greetz, Swordfish



  • Ich hatte in einer kleinen Testanwendung probiert, die DLL's zu benutzen. Ich weiß nicht woran es lag bzw. liegt, jedenfalls wurden bei einigen DLL's gesagt "Die Anwendung oder DLL ... ist keine gültige Windows-Anwendung". Das Problem ging in diesem Fall aber weg, wenn ich die OBJ-Datei mit gelinkt habe.



  • Wenn Du eine DLL zur Verfügung stellst, musst Du Folgendes beachten:
    1. Benutzer niemals C++ in der Schnittstelle!
    2. Benutze niemals CRT-Dinge in der Schnittstelle (also FILE-Handles, Speicher allokationen in der DLL und in der EXE freigeben)
    3. Benutzer nie STL/MFC/ATL in der Schnittstelle
    4. Linke nie gegen die DLL-Version der CRT (führt nur zu Problemen z.B: bei "locale")

    Fazit:
    Mach eine *reine* C-Schnittstelle und allokiere notwendigen Speicher immer in Deiner DLL und stelle eine Funktion zur Verfügung um den Speicher wieder freizugeben.

    Und dann die LIB/DLL/h weitergeben.



  • Muss ich dafür wirklich eine Funktion bereit stellen oder reicht es, wenn ich den Speicher in der DllMain freigebe?
    Ansonsten nochmal die Frage, ob jemand vllt. eine Idee hat, wieso ich manchmal die Objektdatei der Dll dazu linken muss bzw. wie sich das abstellen lässt.


Anmelden zum Antworten