Statisch dynamic mixing



  • Hallo zusammen,

    ich habe umfangreiche DLL's die wiederum selber DLL's laden.
    Diese Gerüste sind alle statisch verlinkt. (Camera Interface)

    Nun funktioniert auch alles wunderbar wenn ich dieses Interface (kein Com)
    mit "neueren" Programmen aufrufe z.B. via Twain.

    Verwendet man aber ein altes Programm, das z.B. eine Runtime von 2005 dynamisch verwendet, kommt es zu unvorhergesehenen Abstürzen.

    Was läuft eigentlich falsch ?

    Danke für jedwede Hinweise.
    Grüße aus Berlin
    Karsten Schulz


  • Mod

    Bist Du sicher, dass alle Module, die gleiche Runtime benutzen?
    Wann kommt es zum Crash? Bei der Ausführung? Beim Laden?
    Was ist verfügbar:
    Crashdumps? Callstack?
    Dumps lassen sich auch nachträglich erzeigen.

    Andere Frage: Warum verwendest Du eine so alte Runtime?



  • Hallo Martin,

    Bist Du sicher, dass alle Module, die gleiche Runtime benutzen?

    Also meine Module(Dll's) sind ja alle statisch gebunden (immer), aber das was ich als "Firmware"-DLL einlade, verwendet die dynamische OpenMP Angelegenheit via VT100.DLL weil sich ja OpenMP eh nicht statisch linken lässt.

    Diese externe Kunden.DLL mit dem "OpenMP" muss ich einladen, um weiteren Zugang z.b. für deren Kameras zu erlangen. (Fremde Hardware)

    Dann läuft die Sache, z.B. via TeamView zeigt dann diese Kameras an, oder PaintShop Pro von (2012) keine Probleme.

    Dann Bei PhotoShop(2008) oder noch weiter draußen, wenn eine Jawa Angelegenheit das DLL Gegrüßt anruft z.b. Via ImageJ(20012) was auch dynamische DLL's lädt die wiederum meine DLL Laden, crasht es sporadisch, aber immer im Zusammenhang mit Aktionen die Speicher allokierungen o. STD::Listen::adds auslösen.
    Der Zusammenbruch entsteht immer in der letzten DLL, und zwar nachdem alles schon läuft, also nicht am Anfang sondern mitten drin.
    (Letzte DLL ist diese Kunden DLL die wiederum dynamisch aufgebaut ist)
    (Diese DLL ist von einem Namenhaften Hersteller für den ich wirke).

    Ich kann also anhand der eigenen statischen Executables, oder die der neueren Programme referenzieren : Das alles funktioniert.

    Der sporadische crash hängt schon seit einem Jahr an der Sache, und ich bin deswegen sicher das es mit dem alter der Anrufer zu tun hat, die dynamische RT's verwenden.

    Crashdumps? Callstack?
    Wie sehe ich denn in einem Crashdump ob eine falsche RT sich überlagerte ?
    Ich sehe den Callstack der Firm-DLL (Asm code 🙂 die ich als letztes Glied geladen habe, diese ist vom Kunden und der Inhalt ist nicht für mich sichtbar.

    Außerdem gibt es Situationen, wo ich noch einen wrapper dazwischen habe , z.b. über das MicoMaaager SDK (Von ImageJ 2013) der ist dann mit dem Windows SDK 7.1a statisch gelinkt , und es passieren merkwürdige Sachen die bei der dortigen Zeitmessung mit Micro Ticks entstehen, z.b das der LiveView einfach endet, als hätte ich die Kontrolle über das Programm verloren..

    *Woher bekomme ich denn SDK's optional ich habe nur
    7.1a(Letzter DirectShow Client) im Programme/Kits folder.
    Sowie natürlich das XP Kit mit dem ich alle meine Komponenten
    wenn möglich kompiliere, nur die DirectShow oder bestimmte Kamerawrapper
    verlinke ich mit dem 7.1a SDK.

    Seit neustem wird mir eine UniversalRT angeboten (VS2017), wie das funktioniert weiß ich nicht, Windows driftetja völlig ab und will zum Handy werden, scheinbar werden wir bald nur noch in ein er VM laufen.*

    Wie sagt der Martin : Der Programmierer kann sich seinen eigenen Himmel erschaffen, oder seine eigene Hölle.

    Ich schwebe nur deswegen dazwischen, und sehe in der Dunkelheit wie sich die Wirklichkeit in der Vermutung verliert.

    omg..

    Vielleicht hast Du ne Idee, was sich da bedingt, und was eigentlich passiert wenn eine DLL von 2008 (dynamisch) eine statische DLL von 2017 lädt, und die wiederum eine die auch dynamische Elemente hat zb VT100 OPenMP.

    Danke für deine Hinweise,
    gruß
    Karsten



  • Ok das hat hier suchen ausgelöst und ich habe den Fehler gefunden,
    andere Schlaumeier haben in den projektdateien ein retargeting
    per hand durchgeführt:

    Die Entwickler haben in Ihren Example -Projekten ein Verzeichnis angelegt namen‘s BuildScripts dort steht eine
    Abfolge von ToolSet Richtlinien drin. Die beschreiben welches SDK mit dem Produkt verbunden werden soll.
    Normalerweise wird dies in den Propertypages der
    Entwicklerplattform eingetragen, doch dieser Eintrag wird ignoriert da in den Scripten ein „Retargeting“ durchgeführt wird.

    Meine Teile waren gegen die falsche Rt gelinkt.

    Muss man auch mal drüber geredet haben, ist nicht immer alles offenbar..

    https://www.youtube.com/watch?v=rEddcej8CTI


Anmelden zum Antworten