wie mache ich eine wrapper unit in delphi

  • hallo!
    hab ein projekt, das in einer unit vier funktionen enthält. die liegen in der klasse der MainForm heißen also
    function TMainForm.func_a;
    function TMainForm.func_b;
    function TMainForm.func_c;
    function TMainForm.func_d;

    nun will ich eine wrapper unit schreiben, durch welche ich im startmenü von windows 4 einträge machen kann, welche je eine exe aufrufen, die wiederum die jeweilige funktion startet. bisher hatte ich ein formular mit 4 buttons und habe die per click event gestartet (um zu schauen, obs funktioniert).

    d.h. ich brauche gewissermassen 4 wrapper units (für jede funktion eine eigene). allerdings habe ich das leider noch nie gemacht, daher tu ich mir moemtan etwas schwer, wie ich das machen soll.

    ich muss also die wrapper unit so programmieren, dass diese beim start der exe mir die function aufruf.

    also in peseudocode (für die wrapper)

    .....
    procedure StarteFunA;
    begin
    TMainForm.func_a;
    end;
    ....

    könnte mir bitte wer (vielleicht schrittweise inkl. wahl des typs der anwendung) erklären, wie ich das realisiere? ist nämlich meine erster wrapper unit in delphi :coolsmile und ausser, dass ich darin eine funktion brauche, die beim start der exe mir die function aus meiner unit aufruf (z.B. TMainForm.func_a) habe ich momentan nicht viel ahnung, wie die wrapper unit auszusehen hat. vorallem wie ich das ohne zusätzlich angezeigtem formular machen kann :confused:

    vielleicht kann mir da bitte wer weiterhelfen, der sowas schon gemacht hat.

    danke.

    lg,
    stephan.

  • Ich kapier nicht ganz, was du da genau machen willst. Wenn die Funktionen schon passen, dann werte einfach beim Start der exe die Parameter aus, und ruf die entsprechende Funktion auf.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • auf gut deutsch, ich will mit der wrapper unit eine der 4 funktionen rausfischen und starten lassen, sobald die exe gestartet wird.
    also so als ob das ganze programm nur aus dieser einen funktion besteht.

    mit parametern hab ich mir auch schon mal überlegt, nur wollte ich mal das ganze mit einer wrapper unit machen, weil ichs eben unter delphi noch nie gemacht habe und auf dem weg lernen wollte. nur ists scheinbar leider doch nicht so einfach wie ich mir dachte, also nicht nur funktion aufrufen und das wars.

    würde wie gesagt gerne lernen bzw. ausprobieren, wie das über eine wrapper unit geht, die mir "die gewünschte(n) funktion(en)" nach aussen führt bzw. sie mir startet (in meinem fall).

    also ein klick auf die exe soll nichts anderes machen, als dass die funktion, die mit der wrapper unit zugänglich gemacht wurde, startet. sonst allerdings nichts, auch wenn die funktionen in der unit deutlich mehr könnten.

  • will also auf gut deutsch wrapper unit programmieren lernen und das gleich als anlass dafür hernehmen (weil sowas läßt sich ja durch eine wrapper unit meines wissens nach leicht lösen, nur weiß ich selbst nicht wie)

  • Ich glaub, ich steh da auf der Leitung, und weiß nicht, was du da mit Wrapper-Unit meinst. Gibt aber sicher noch andere Leute, die dir weiterhelfen können.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • wrapper unit ist eine unit bzw. sammlung von funktionen, die andere aufrufen oder eine api abbilden, also funktionen, auf die du von außen zugreifen kannst.

    auf gut deutsch, das innenleben ist eine blackbox und die wrapper ist der teil, den du siehst. und beim start soll nun aus der blackbox jetzt genau eine fixe funktion aufgerufen werden.

    beispiel: du hast eine sammlung an ethernet und internet tools wie ping, tracerout usw.
    und nun willst du eine funktion schreiben, die genau eine funktion aufruft, wenn du die exe startest. d.h. du läßt die sammlung an funktionen wie sie ist, programmierst nur eine weitere unit dazu, die dir eine dieser funktionen beim aufruf der exe fix startet.

    nur frag ich mich irgendwie, wie ich delphi begreiflich machen kann, dass es genau die funktion dieser neuen unit aufrufen soll, damit dadurch die funktion gestartet wird.

    also in der unit soll nur soviel drinnenstehen, dass eine funktion aus einer sammlung von funktionen gestartet wird.

    die frage ist also, was muss alles in dieser unit drinnen stehen, damit genau nur dieser aufruf passiert. also dass diese unit beim start genau die funktion rauspickt, die ich haben will. dass das mit deinem aufruf der funktion geht, aber ich muss eine procedure schreiben a la

    procedure StarteFunktion;
    begin
    Funktion_A;
    end;

    aber wie muss diese unit aussehen (ohne Form ohne sonstwas), dass ich dabei genau den Aufruf dieser Funktion auslöse. Besonders auch noch, dass die Form für die Funktion A auch miterstellt wird.

    Ist es jetzt etwas klarer, was ich herauszufinden versuche. Eben wie schaut die unit aus und was muss da alles drinnen stehen, damit die gewünschte Funktion A der Funktionssammlung gestartet wird.

  • Na dann ist unsere Wrapper-Definition eh sehr ähnlich.
    Was mir so absolut gar nicht klar ist, ist, was du willst.
    Sollen das 4 verschiedene exe sein, und jede ruft dann die andere exe mit einer bestimmen Funktion auf? Ich kapiers echt nicht, was du da genau machen willst. Willst du eine dll kapseln? Wie soll deine "unit" gestartet werden? Das ist dann doch auch eine exe. Skizzier bitte grob, wie du dir das ganze vorstellst, und zwar nicht, wo ne unit ist, sondern wie du dir das kompilierte Endprodukt vorstellst. Es ist nämlich echt verwirrend, und ich hab schon geglaubt, du weißt nicht, was ein Wrapper ist.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • also das soll so aussehen:

    starte_a.exe => wrapperunit für funktion a => function_a
    starte_b.exe => wrapperunit für funktion b => funktion_b
    usw.

    also ich erzeuge 4 exe. ich habe damit 4 wrapper units (also je eine) und jede exe startet mir eine der funktionen (welche ist über die wrapper unit fix codiert).

    also die funktion jeder wrapper unit ist:
    bereite alles für die funktion vor (ich würde mal sagen form erzeugen usw.) und dann starte die funktion.

    stell dir also vor, du hast in einer eigenen unit eine sammlung an funktionen und willst nun eine weitere unit schreiben, die dir genau eine aus dieser klassensammlung aufruft. und genau das mach ich hier.

    nur bin ich mir nicht ganz im klaren:
    1) muss ich die formhandler (form create, form show usw.) in die neue unit rüberschieben oder bleibt das drüben
    2) wenn 1 nicht notwendig, besteht die wrapper dann nur aus 1 funktion, die die andere startet?

    ich stell mir irgendwie eine wrapper unit vor wie jede andere unit, die eine sammlung von units über uses einbindet. aber die wrapper ist halt scheinbar die, die den hauptaufruf macht und die beim start alle kommandos und vorbereitungen abarbeitet.

    in meinem fall würden das 4 exe werden, also für jede funktion eine. momentan will ichs mal für eine machen, das andere ist nur einen anderen funktionsaufruf reincodieren.
    in gewisserweise mache ich ja das gleiche wie eine wrapper unit einer dll. da habe ich auch in der dll selbst eine funktionssammlung und bilde eine api, mit der ich von außen auf die funktionen zugreifen kann. bei der dll muss ich die einbinden, hier brauch ich dann nur die exe starten und ich brauch nicht n funktionen "nach außen" sondern nur eine einzige.

  • Ok, du hast viel zu oft von units geschrieben, und nicht erwähnt, ob du eine exe oder ne dll oder was auch immer machen willst.

    Also eine bestimmte Funktion, die in einer exe drin ist, wirst du wohl nur aufrufen können, wenn diese exe Parameter akzeptiert, und dann eben sich selbst um die Funktion kümmert. Andernfalls eben eine dll schreiben. Das erfüllt eher den Zweck.

    Wenn du keine Formulare brauchst, dann löschs raus, und schreib alles in die dpr-Datei, das Application.* brauchst auch net, und die meisten uses Dinger kannst rausnehmen.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • äh moment, ich rufe nicht direkt aus der exe eine funktion auf, das ganze (inkl wrapper) ist die exe. der wrapper ist eigentlich nur eine weitere unit. also wird dann teil des projektes. nur beim start der exe wird die funktion dieser unit ausgeführt.

    bei einer dll ist ja die wrapper unit auch teil der dll und bietet eine api an funktionen.

    der wesentliche unterschied zu hier ist ja dann nur, dass ich keine dll sondern eine exe habe (also das direkt starten kann, ohne es wo einzubinden) und dass ich nur eine funktion habe und die gleich direkt starte (und nicht von außen in dem sinn zugänglich mache).
    die funktion hier ist in dem sinne "nach außen hin zugänglich" als dass sie beim aufruf der exe ausgeführt wird. also ist die wrapper unit eigentlich nichts anderes als eine sammlung von funktionen und aktionen.

    also sowas wie

    Code
    unit wrapper;
    uses .... my_funcs ....;
    .....
    procedure StartFunk;
    begin
      TMainForm.funca;
    end;

    und

    Code
    unit my_func;
    .....
    function TMainForm.funca;
    begin
      ... do something ....
    end;
    ....

    nur wird das aus mir unerfindlichen gründen vielfach als wrapper unit bezeichnet. obwohl eigentlich jede unit, welche eine selbstgeschriebene unit aufruft, dann auch eine wrapper wäre. aber scheinbar bezeichnet man jene, welche die front darstellt (api usw. enthält) als wrapper und die anderen nicht, obwohl der aufbau im wesentlichen der gleich ist, was ich nach einiger suche im netz mitlerweile draufgekommen bin.

  • Naja, wo is das Problem? Mal abgesehen davon, dass du deine Funktionen nicht als Methoden von TMainForm schreiben solltest, wenns mitn Formular nix zu tun haben. Schreib entweder normale Funktionen, oder eine eigene Klasse.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • func_a usw. hat schon mit der form was zu tun. denn die arbeiten damit.
    was ich gemeint habe mit "ich brauche die form nicht mehr" ist, dass ich nicht mehr eine form mit 4 buttons darstelle, die ich anklicke um eine der funktionen auszulösen.
    die form für die funktionen brauch ich schon. die gehören zu der form dazu und sind auch in der klasse definiert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!