Announcement

Collapse
No announcement yet.

komplettes Programm in eine dll umwandeln

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

  • komplettes Programm in eine dll umwandeln

    Hallo
    Ich bin gerade dabei, ein komplettes Delphi Programm in eine Web Anwendung umzukonvertieren. Das Programm ist recht groß und streng Objektorientiert geschrieben. Gibt es eine Möglichkeit das komplette Programm als dll zugänglich zu machen? im Prinzip habe ich das mit dem Resource dll Wizard schon geschaftt, ich kann dort aber keine Funktionen oder Prozeduren exportieren, da die zu exportierenden Funktionen in anderen Dateien implementiert sind. meistens sind diese auch überschrieben und die Objekte aus ein oder zwei klassen weiter unten abgeleitet. Wenn ich mir selbst eine Library mache und die Units einbinde, kann er sie auch nicht exportieren.
    Wäre dankbar wenn mir jemand weiterhelfen könnte.
    Gruß Thorsten

  • #2
    Hi,

    Ja..komplette Objekte lassen sich nicht einfach exportieren.

    Um also dein Programm aufrufen zu können müsstest du dir eine "Aufruf"-Funktion schreiben die dein Programm startet (dies läuft dann komplett in der DLL ab). Die Funktion kannst du exportieren.

    Gruß Uw

    Comment


    • #3
      Hallo Uwe
      Mit so etwas habe ich in Delphi leider keine Erfahrung, wie gehe ich diese Aufruf - Funktion an? Vielleicht könntest du mir ein kleines Beispiel geben. Würde mir sehr weiterhelfen
      <br>
      Danke schonmal
      <br>

      Thorste

      Comment


      • #4
        Hm..gemacht hab ich sowas noch nicht. Aber so als ansatz würd ich einfach mal den Hauptprogrammteil in eine Funktion stecken

        (sieht dann ungefähr so aus):
        <I><PRE>
        Procedure StartProgramm;
        begin
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
        Application.Run;
        end.
        </I></PRE>
        Dies kannst du dann exportieren und aufrufen. Evtl. müsstest du dir noch ein TApplication-Object generieren.

        Gruß Uw

        Comment


        • #5
          Hallo Uwe <br>
          Wie kann ich dann auf meine Funktionen aus dem laufenden Programm zugreifen? Es geht darum, daß ich das bestehende Projekt (mit vielen selbst entwickelten Objekten) online zugänglich machen will. d.h. ich muss, wenn ich nicht alles neu schreiben will einen teil des codes übernehmen. Ich stellte mir das so vor, daß ich dann aus meiner Websprache die dll einbinde (funktioniert auch) und die bestimmten Funktionen dort verwende. Ich habe jetzt deinen Vorschlag erweitert und rufe aus der library nicht die Application sondern nur die einzelnen funktionen auf. Die Funktion, die ich exportiere ruft dann mit den beötigten Parametern die Funktion meines Delphi codes auf, das funktioniert aber nicht mehr, sobald die aufgerufene funktion irgend ein selbst erstelltes Objekt verwendet. Hab ich gar keine chance den bestehenden Code zu übernehmen?

          danke schonmal
          Gruß Thorste

          Comment


          • #6
            Wenn du das benötigte Objekt in der aufgerufenen Funktion instansiierst und auch wieder frei gibst sollte das funktionieren, zumindest solange du keine Window-Handels benötigst (siehe Beitrag "Forms in DLL". Das hängt mit der Speicherverwaltung von DLL's zusammen, da DLL's einen eigenen von der Applikation unabhängigen Speicherbereich haben. Reine von TObject abgeleitet Objekte sollten auf die oben genannte weise funktionieren.

            Mal ein Beispiel:

            du hast eine Classe TDLLKLASSE (irgendwo abgleitet von TObject):

            <PRE>
            Type
            TDLLKLASSE = CLASE(TOBJECT)
            Private
            :
            procedure Tuirgendwas;
            :
            end;

            </PRE>

            Dann müßte die dazugehörige Funktion in der DLL ungefähr so aussehen:
            <pre>
            Procedure RufMeineDLLKlasseauf;
            VAR
            Inst : TDLLKLASSE;
            begin
            INST := TDLLKLASSE.CREATE;
            inst.Tuirgendwas;
            Inst.free;
            end;

            export
            RufMeineDLLKlasseauf NAME = "RufMeineDLLKlasseauf";

            </PRE>

            Im deiner Application hast du jetzt nach dem import der Library die Funktion RufMeineDLLKlasseauf zur verfügung.

            Gruß Uw

            Comment

            Working...
            X