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.