CG: Resource from different RTL



  • Hallo,

    ich benutze BCB6 und habe eine DLL erstellt, die weitere DLLs statisch benutzt (GSL Lib). In meiner DLL benutzte ich keine dynamische RTL und auch keine Laufzeitpackages. Im Endeffekt nutze ich dort nur eine STL deque und natürlich die Aufrufe der GSL-Funktionen.

    Wenn ich nun eine Applikation erstelle und dort meine DLL statisch linke, funktioniert es erstmal. Die Berechnungen werden korrekt ausgeführt.

    Aus der DLL exportiere ich eine ganze Klasse, von der ich im Programm eine Instanz dynamisch erzeuge;

    Bei Beenden des Programms bzw Freigeben der Klasseninstanz bekomme ich einen CodeGuard Fehler:

    "Resource from different RTL"...Speicheradresse so und so

    Wenn ich in der DLL dynamisch RTL benutzte, bekomme ich eine genauere CodeGuard-Meldung:
    "Resource from different RTL"... cc3260mt.@bdelebdeleqpv

    Das statische linken in DLL und Programm der memmgr.lib funktioniert auch nicht.

    Kann mir jemand helfen?



  • Alle Module des Projektes müssen in diesem Fall die dynamische RTL verwenden.



  • Vielen Dank für die Antwort.

    Wenn ich DLL und App mit dynamischer RTL erzeuge, bekomme ich am Programmende einen Winhelpviewer-Fehler im Codeguard.

    Ich habe wahlweise dyn. RTL, Laufzeitpackages, Debugbibliotheken in DLL und App in allen möglichen Kompinationen ein- und ausgeschaltet.
    Dazu noch in allen Kombinationen memmgr.lib gelinkt oder weggelassen.

    Es hilft einfach nichts. Jetzt habe ich eine Nicht-VCL DLL erzeugt, denn die VCL brauche ich im Grunde nicht und dann bekomme ich am Programmstart eine CG-Messagebox von wegen unterschiedlich verwendeter DLLs zum debuggen?

    Über google finde ich nichts, was mir weiter hilft. Was ist das bitte für ein Crap mit Borland? Ich brauche dringend Rat 😞

    Gruß



  • int02h schrieb:

    Wenn ich DLL und App mit dynamischer RTL erzeuge

    ... bist du erstmal auf dem richtigen Weg. Allerdings mußt du dann auch die Laufzeit-Packages aktivieren.

    int02h schrieb:

    bekomme ich am Programmende einen Winhelpviewer-Fehler im Codeguard.

    ... wenn dynamische RTL und Laufzeit-Packages aktiviert sind?

    Was sagt die Fehlermeldung genau?



  • Bei den ganzen Optionen an / aus hatte ich leicht die Übersicht verloren. In der DLL hatte ich dann dyn. RTL an, Laufzeitpackages an. In der App bekam ich trotz CG am Start eine ungefangene Exception (MessageBox), nichts ging. Also habe ich dyn. RTL dort aus. Dann kam am Ende des Programms und beim Freigeben der Klassen-Instanz (aus der DLL exportiert) folgende Meldung: (Screenshot)
    http://www.fotos-hochladen.net/uploads/winhelpviewercwejm8dtrb.jpg

    Nach einer Weile googlen kam heraus, dass es ein Bug in der winhelpviewer.pas vom BCB6 war. Die mit "fix" kommentierten Zeilen wurden hinzugefügt:

    initialization
      HelpViewer := TWinHelpViewer.Create;
      HelpIntfs.RegisterViewer(HelpViewer, HelpViewer.FHelpManager);
      WinHelpTester := nil;
    finalization
      if Assigned(HelpViewer.FHelpManager) then
      begin
        HelpViewer.InternalShutDown;
      end;
      if Assigned(WinHelpTester) then 
      begin
        WinHelpTester := nil;
      end;
      HelpViewer.FreeInstance;  // fix
      HelpViewer := nil;  // fix
    end.
    

    Dann habe ich die pas-Datei in das Projekt eingebunden. Jetzt gehts endlich 🙂 Komischerweise benutzte ich keine Hilfedateien oder irgendetwas, was in die Richtung geht. Die DLL habe ich jetzt wieder als VCL-DLL erzeugt.

    Der Bug ist angeblich in Delphi 7 bereits behoben, in BCB6 trotz Updates nicht, was dann eher schwach ist.

    Gruß



  • int02h schrieb:

    Dann habe ich die pas-Datei in das Projekt eingebunden. Jetzt gehts endlich 🙂

    Wunderbar!

    int02h schrieb:

    Der Bug ist angeblich in Delphi 7 bereits behoben, in BCB6 trotz Updates nicht, was dann eher schwach ist.

    Wie alt ist C++Builder 6 nochmal?

    Gelegentliche Upgrades sind sinnvoll. Ich hoffe, du siehst das jetzt bestätigt 😉


Anmelden zum Antworten