Announcement

Collapse
No announcement yet.

DLL anbinden

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

  • DLL anbinden

    hi leute....

    ich hab nen problem und hoffe, dass ihr mir helfen könnt....

    ich habe mit delphi 7 ein kleines tool erstellt und diese in eine dll gepackt.

    die dll heißt <b>pw.dll</b> und der aufruf der form(procedure) heißt <b>password</b>.

    nun die frage....

    wie kann ich die dll in c++ builder einbinden um bei buttonklick die form anzeigen lassen?

    ich danke schon jetzt für eure mühen und verbleibe...

    mfg
    ice

  • #2
    Lib-Datei dem Projekt hinzufügen
    Header Datei includieren

    TMyForm* form = new TMyForm(this);
    form->ShowModal();
    delete form; // optional

    Sieht man einmal davon ab, daß Sie das Formular vor dem Anzeigen auf dem Bildschirm explizit erzeugen müssen, gibt es aus der Sicht der aufrufenden Anwendung keinen Unterschied zwischen dem Formular aus der Anwendung und dem Formular aus einer DLL.
    -----------
    DLL-Formulare aus Anwendungen aufrufen, die nicht mit dem C++Builder erstellt wurden

    Wenn Sie ein Formular aus einer Anwendung heraus aufrufen wollen, die nicht mit dem C++Builder erstellt wurde, müssen Sie etwas mehr Aufwand betreiben. Da die aufrufende Anwendung nichts über die VCL weiß, können Sie nicht einfach eine VCL-Klasse importieren und deren ShowModal()-Methode wie bei einer C++Builder-Anwendung aufrufen. In der DLL müssen Sie eine eigenständige Funktion implementieren, die von der aufrufenden Anwendung aufgerufen wird. Sofern Sie diese Funktion dann noch als extern "C" deklarieren, kann die Funktion von jedem beliebigen Programm aus aufgerufen werden. Innerhalb der geschweiften Klammern dieser Funktion erzeugen Sie dann das Formular und führen es aus.

    Das Formular in der DLL erzeugen Sie wie oben beschrieben, nur daß Sie die Klasse des Formulars nicht exportieren müssen. Statt dessen richten Sie in der Quelltext-Unit des Hauptformulars folgende Funktion ein:

    void ShowForm()
    {
    TMyForm* form = new TMyForm(0);
    form->ShowModal();
    delete form; // obligatorisch
    }

    Beachten Sie, daß als Elter des Formulars NULL übergeben wurde. Der Grund hierfür ist einfach, daß C++Builder-Anwendungen, die nicht mit dem C++Builder erstellt wurden, über kein VCL-Objekt verfügen, das man als Elter des Formulars übergeben könnte. Aus dem gleichen Grund müssen Sie das TMyForm-Objekt explizit löschen.

    Der nächste Schritt besteht darin, einen separaten Header für die DLL einzurichten. Denken Sie daran, daß die Klasse des Formulars nicht exportiert wird und die aufrufende Anwendung mit dem Header des Formulars folglich nichts anfangen kann. Was die aufrufende Anwendung braucht, ist ein Header, der die ShowForm()-Funktion enthält. Schreiben Sie also einen Header mit einer Deklaration für die ShowForm()-Funktion, und nehmen Sie diesen per #include-Anweisung in die Quelldatei der aufrufenden Anwendung auf (benutzen Sie die Makro-Version, damit die Funktion korrekt importiert und exportiert wird). Bei der Erstellung der aufrufenden Anwendung müssen Sie wie gehabt die .LIB-Datei für die DLL mit einbinden. Alternativ können Sie die DLL auch zur Laufzeit laden. Wofür Sie sich entscheiden, hängt von Ihren eigenen Vorlieben ab und der Sprache, in der Sie die aufrufende Anwendung implementiert haben
    Christian

    Comment

    Working...
    X