Wie kann man DLL verbinden



  • ich bin Anfänger mit C++ Builder und kann ich nicht Dll mit einem Programm
    verbinden. Kann jemend mir helfen, Bitte.
    vielen Dank.





  • ich habe nicht geschaft. Wer kann auf dateien kocken und sagt welche fehler habe ich gemacht. Helfensie mir,bitte. vielen dank
    in datei .cpp

    #include <vcl.h>
    #pragma hdrstop
    #include "UnitMain.h"
    #include <windef.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TFormMain *FormMain;
    //---------------------------------------------------------------------------
    __fastcall TFormMain::TFormMain(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    HINSTANCE hdll;
    hdll = ::LoadLibrary("Dll_C.dll");
    void (__stdcall* Plus)(int);
    void (__stdcall* Minus)(int);
    
    Plus =(void(__stdcall*)(int))GetProcAddress(hdll,"_Plus");
    Minus =(void(__stdcall*)(int))GetProcAddress(hdll,"_Minus");
    
    FreeLibrary(hdll);
    //---------------------------------------------------------------------------
    void __fastcall TFormMain::BtnMinusClick(TObject *Sender)
    {
      int a, b, s;
      a = StrToInt(Edit1->Text);
      b = StrToInt(Edit2->Text);
      s = Minus(a,b);
      Label->Caption = IntToStr(s);
    }
    
     in dataei .header
    
    #ifdef __DLL__
    #	define DLL_TYP __declspec(dllexport)
    #else
    #	define DLL_TYP __declspec(dllimport)
    #ifndef UnitMainH
    #define UnitMainH
    #ifndef GFILEH
    #define GFILEH
    #endif
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <CmAdmCtl.hpp>
    #include <OleServer.hpp>
    //---------------------------------------------------------------------------
    class TFormMain : public TForm
    { class DLL_TYP TFormMain : public TForm
    
    __published:	// Von der IDE verwaltete Komponenten
            TButton *BtnPlus;
            TRadioButton *RBCom;
            TCOMAdminCatalog *COMAdminCatalog;
            TLabel *LbComPort;
            TButton *BtnMinus;
            TEdit *Edit1;
            TEdit *Edit2;
            TLabel *Label1;
            void __fastcall BtnConnectClick(TObject *Sender);
            void __fastcall BtnMinusClick(TObject *Sender);
            void __fastcall BtnPlusClick(TObject *Sender);
    private:	// Anwender-Deklarationen
            typedef int Plus(int x, int y);
            typedef int Minus(int x, int y);
    
            DLLFUNCTION *pDllFunction;
    public:		// Anwender-Deklarationen
            __fastcall TFormMain(TComponent* Owner);
    
            DLL_TYP();
            void CallDllFunction();
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TFormMain *FormMain;
    //---------------------------------------------------------------------------
    #endif
    


  • Hallo

    du hast da etwas aus dem Tut überlesen :

    Nun kann die Funkiton genutzt werden. Ist die DLL nicht mehr vonnöten muß diese freigegeben werden:
    FreeLibrary(hdll);

    Das heißt sowohl deine ganze Initialisierung als auch die Freigabe der DLL-Funktionen sollte in Funktionen, die zu den richtigen Zeitpunkten aufgerufen wird.
    Vorzugsweise die Initialisierung in den Konstruktor und die Freigabe in den Destruktors des Forms.

    bis bald
    akari



  • Hallo,

    Vielleicht schaust du auch nochmal in dieses Tutorial
    http://bcb-tutorial.c-plusplus.net/DLL_Tutorial/index.html
    Das ist etwas umfangreicher als das Andere.
    Noch weitere Bemerkungen:
    - kontrolliere nach LoadLibrary ob das Laden erfolgreich war (hdll != 0)
    - kontrolliere nach GetProcAddress ob das Laden der Funktionen erfolgreich war (Funktionszeiger != NULL)
    - die Parameterliste deiner dll-Funktionen stimmt nicht mit der lokalen Funktiondeklaration überein (in dll ein int, lokal zwei int)

    Ciao



  • hallo alle zusammen
    ich habe fiertiges Dll unter Delphi und will mit einem programm unter C++
    einbenden.


Anmelden zum Antworten