Announcement

Collapse
No announcement yet.

Stream als Funktionsparameter in DLL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Stream als Funktionsparameter in DLL

    Ich habe in einer selbst entwickelten DLL eine Funktion mit einem TStream als Input/Output Parameter implementiert. Die Anwendung verwendet dann je nach Situation einen TMemoryStream oder ein TFileStream als Parameter für diesen Funktionsaufruf.

    Solange die Anwendung eine Win32-Applikation ist, läuft das ganze problemlos.
    Wenn ich hingegen diese DLL-Funktion aus einem Win32-Service aufrufe, sehe ich jedoch nach der fehlerlosen Ausführung der betroffenen Funktion eine merkwürdige Access-Violation, die sich nicht weiter lokalisieren lässt, die aber eine Folge dieses Funktionsaufrufs sein muss.

    Gibt es irgendwelche Restriktionen bei der Stream-Übergabe über
    DLL-Grenzen hinweg? Ich verwende beidseitig die selbe Delphi Version 2006 (Auch mit D7 habe ich die selbe Situation).

    Besten Dank für Tipps.
    Zuletzt editiert von Christoph Schneider; 03.05.2007, 12:23.
    Schneider Infosystems AG, Schweiz

    http://www.schneider-infosys.ch

  • #2
    Verwendest du gemeinsam Laufzeitpackages?

    Comment


    • #3
      Nein, die Option "Built with runtime packages" ist in den Projekt-Optionen des Service wie auch der DLL ausgeschaltet.

      In welche Richtung zielt deine Frage?
      Schneider Infosystems AG, Schweiz

      http://www.schneider-infosys.ch

      Comment


      • #4
        Dann hast eher Glück das es bisher ging. Ohne Laufzeitpackages darfst du keinen "lebenden" Instanzen von Klassen über DLL-Schnittstellen übertragen. Du mußt deine DLL auf "C-Kompatiblität" umbauen.

        Ohne Laufzeitpackages ist es vom Zufall abhänig ob es nicht an allen möglichen Stellen kracht wenn du sowas machst, da TObject in Exe <> TObject in Dll.

        Comment


        • #5
          Wie stelle ich denn jetzt konkret die Übergabe eines TStream-Objekts auf C-Kompatibilität um? (Bei String ist mir mit Verwendung von PChar ja noch alles klar). Oder anders gefragt wo und welche Laufzeitpackages soll ich denn einbinden und warum?

          Danke für deine Hilfe.
          Schneider Infosystems AG, Schweiz

          http://www.schneider-infosys.ch

          Comment


          • #6
            Wie wäre es mit einem untypisierter Pointer-Angabe?

            Mit Laufzeitpackages mindestens RTL.bpl und evtl. VCL.bpl.

            Comment


            • #7
              Die Laufzeitpackages muss ich nur in der DLL einbinden, oder?
              Schneider Infosystems AG, Schweiz

              http://www.schneider-infosys.ch

              Comment


              • #8
                In beiden. Exe und DLL.

                Comment

                Working...
                X