kostenloser Webspace werbefrei: lima-city


Dlls Klassen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    e***i

    Wie kann man Klassen in DLLs packen und die dann verwenden?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das ist eigentlich einfach nur man muss halt dem Programm klar machen wie die Klasse aussieht, da man quasi nur die Funktion/Proceduren exportieren kann.

    DLL Code:
    (Das __stdcall kann wegbleiben da es nur eine Aufrufkonvention ist und regelt wie die Parameter auf dem Stack abgelegt werden)

    #include <windows.h>
    #define DllExport __declspec(dllexport)

    DllExport class C
    {
    private:
    int i;
    public:
    void __stdcall SetInt(int);
    int __stdcall GetInt();
    };
    //--------------------
    /*Nur wichtig f?r die DLL an sich aber nicht f?r die angesprochene Problematik*/
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
    {
    return 1;
    }
    /******************************************************************************/
    void __stdcall C::SetInt(int var)
    {
    i = var;
    }
    //----------------------------------
    int __stdcall C::GetInt()
    {
    return i;
    }

    (Und der Aufruf in einer Anwendung erfolgt so(Lib ganz klar mitlinken))

    EXE Code:

    (Erst mal musst du dem Programm klar machen wie die Klasse eigentlich ausschaut das kannst ?hnlich machen wie bei der DLL)

    ...
    #define DllImport __declspec(dllimport)

    DllImport class C
    {
    private:
    int i;
    public:
    void __stdcall SetInt(int);
    int __stdcall GetInt();
    };
    ...
    //der Aufruf der Funktion/Proceduren erfolgt wie gewohnt
    C c;
    c.SetInt(5);
    c.GetInt(); //gibt 5 wieder

    C *m_c = new C;
    m_c->SetInt(9);
    m_c->GetInt(); //gibt 9 wieder
    delete m_c;

    *EDIT* Musste was ?ndern da ich nen Fehler gemacht habe, war irgendwie geistig umnachtet.

    Beitrag ge?ndert am 16.05.2006 17:52 von funkdoobiest
  4. Autor dieses Themas

    e***i

    gut danke aber wie kann man das ohne lib machen irgendwie mit so einer speziellen datei wo man EXPORT und IMPORT angibt wei? aber nicht mehr wie die hei?t.
  5. Hmmm es gibt nur noch eine weitere M?glichkeit aber die macht wenig Sinn. Es gibt halt das statische laden und das dynamische (ohne ne lib). Statische hab ich dir ja nun erkl?rt mit declspec das andere w?re mit LoadLibrary

    Sagen wir mal du hast ne Funktion mit dem Namen Hallo der R?ckgabewert ist vom Typ int und besitzt selber 2 Atribute (char *, int)

    Da g?be es halt die M?glichkeit das so zu machen
    //----------------------------------------
    typedef int (Funktion)(char *, int);

    Funktion *f1;
    HINSTANCE hiDll;

    int main(int argc, char* argv[])
    {
    hiDll = LoadLibrary("gruss.dll");
    f1 = (Funktion*)GetProcAddress(hiDll,"Hallo");
    f1("Guten Tag", 1);
    FreeLibrary(hiDll);
    return 0;
    }

    Nur is das eher Unzweckm??ig f?r dein Vorhaben. Au?erdem frag ich mich was du gegen ne lib hast diese sagt dem Linker ja nur welche Funktion sich in der DLL verbergen. Trotzdem bleibt das ganze dynamisch zwecks DLL updaten, etc. Also was spricht dagegen.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!