wie kann ich eine single-threaded dll in einem programm das multithreaded kompiliert werden muss verwenden



  • hi,

    wie der titel schon sagt suche ich nach einer möglichkeit eine single threaded dll in einem multithreaded programm zu nutzen

    (ich muss eine legacy lib nutzen, würde aber zur entwicklung alles außer die anbindung zu der lib halbwegs modern halten)

    mfg Ronny



  • Warum soll das nicht funktionieren?

    Oder wird vielleicht eine Funktion in der DLL gleichzeitig von mehreren Threads aus aufgerufen? Dann muß natürlich die Funktion reentrant ausgelegt sein (keine lokale Variablen verwenden usw.).

    Das hat aber nichts mit single-threaded-Eigenschaft der DLL zu tun.

    Mögliche Alternative: DLLs mehrfach für jeden Thread laden? (Nur eine Idee, habs sowas noch nie gemacht)

    Martin


  • Mod

    Solange Du die DLL nur aus einem Thread ansprichst ist das doch kein Problem, oder missverstehe ich das was?



  • bisher ist das haputproblem, das die lib die ich binden will nur als single threaded statische lib für msvc 2k3 verfügbar ist, mfc sich allerdings recht unbrauchbar verhält und die libs die ich verwenden will nur auf aktuellen vc's verfügbar sind


  • Mod

    Deine Umschalttaste ist kaputt. Du brauchst ein neues Keyboard.

    Ich verstehe Deine Antwort nicht gant. Wenn diese Library in einem anderen Visual-Studio erzeugt wurde, dann kannst Du Sie sowieso nicht nutzen, wenn es keine reine Importlib ist.

    Die Libs müssen alle mit der selben VC Version erzeugt werden.



  • Wenn Du nur eine LIB hast, kannst Du mit der sowieso nix anfangen!

    Eine LIB *muss immer* mit dem gleichen Compiler und den gleichen Settings übersetzt werden wie alles andere auch!
    (es sei denn sie verwendet *keine* CRT/STL/MFC (was sehr unwahrscheinlich ist)!)



  • Jochen Kalmbach schrieb:

    Wenn Du nur eine LIB hast, kannst Du mit der sowieso nix anfangen!

    Eine LIB *muss immer* mit dem gleichen Compiler und den gleichen Settings übersetzt werden wie alles andere auch!
    (es sei denn sie verwendet *keine* CRT/STL/MFC (was sehr unwahrscheinlich ist)!)

    Kann man so pauschal nicht sagen. Ich verwende zwei mit Visual Studio 2005 kompilierte Libs (OpenSSL), die sich problemlos in ein VS 2008-Projekt einbinden lassen. Die CRT wird ohne Manifestbindung benutzt.



  • Doch, das kann man so sagen. Es ist Zufall wenn es geht und wird Dich irgendwann einholen!



  • Jochen Kalmbach schrieb:

    Doch, das kann man so sagen. Es ist Zufall wenn es geht und wird Dich irgendwann einholen!

    Inwieweit? Das der Linker von heute auf morgen plötzlich sagt: Ich mag die Lib nicht mehr?

    Solange man sich außerhalb der Manifest-Hölle bewegt und sich die CRT-Funktionen nicht ändern, gibt es in meinen Augen nichts, was dagegen spricht.



  • Die CRT ändert sich von Compiler-Version zu Version.
    Von VS2005 nach VS2008 sind die Änderungen nicht so gross, deswegen wird es noch nicht aufgefallen sein. Aber falls Du mal eine neuere LIB verwenden wolltest, welche mehr oder andere CRT Funktionen verwendet, kann es schon krachen (auch erst zur Laufzeit und nicht unbedingt beim Linken).



  • Schon klar, wenn ich z.B. eine mit VS 2005 kompilierte Lib in VC6 einbinden möchte. Das geht natürlich nicht. Aber aufwärts sollte es kein Problem sein. Es werden ja nur die Namen der verwendeten CRT-Funktionen importiert, und solange die weiter vorhanden sind, sollte es keine Probleme geben.



  • Es geht in Ausnahmefällen und es wird auf keinen Fall von MS Supported!
    Und sobald STL verwendet wird, geht es auf keinen Fall mehr... nicht mal ansatzweise...

    Iregendwo ist das auch offizel Dokumentiert, finde nur gerde den Link nicht...


  • Mod

    Es knirscht auch sofort, wenn Exceptions verwendet werden...


Log in to reply