DLL Klassen funktionen aufrufen



  • Hi,

    ich versuche eine Funktion aus einer dll Klasse aufzurufen, aber ich weiss nicht wirklich wie ich das machen kann...

    Hier mal mein Beispiel Programm von mir:

    Fuer die DLL:
    <<<dlltest.h>>>

    #ifndef _DLLTEST_H_
     #define _DLLTEST_H_
    
     #include <iostream>
     #include <windows.h>
    
     extern "C" __declspec(dllexport) void NumberList();
    
     class MyClass
     {
     private:
        MyClass();
        ~MyClass();
     public:
        void LetterList();
     };
     #endif
    

    <<<dlltest.cpp>>>

    #include "dlltest.h"
    
     using namespace std;
    
     void NumberList() {
    
           cout << "NumberList(): ";
           for(int i=0;  i<10; i++) {
                cout << i << " ";
           }
           cout << endl;
     }
    
     MyClass::MyClass(){}
     MyClass::~MyClass(){}
    
     void MyClass::LetterList()
    {
           cout << "LetterList(): ";
           for(int i=0;  i<26; i++) {
                cout << char(97 + i) << " ";
           }
           cout << endl << endl;
     }
    

    und fuer die Anwendung...
    <<<main.cpp>>>

    #include <windows.h>
    #include <iostream>
    #include <conio.h> //wait on user reaction - _getch() -
    
     typedef void (WINAPI* cfunc)();
    
     using namespace std;
    
     cfunc NumberList;
     cfunc LetterList;
     int main() {
    
        cout << "Loading library...";
        HINSTANCE hLib=LoadLibrary("TheDLL.dll");
    
        if(hLib==NULL)
            {cout << "Faild! Unable to load library!" << endl;}
        else
            {cout << "Done!" << endl;}
    
        cout << "Loading function...";
        NumberList=(cfunc)GetProcAddress((HMODULE)hLib, "NumberList");
    
        if((NumberList==NULL))
        {
            cout << "Faild! Unable to load function." << endl;
            _getch();//wait on user reaction
        }
        else
        {
            cout << "Done!" << endl;
            NumberList();
        }
    
        FreeLibrary((HMODULE)hLib);
        _getch();//wait on user reaction
        return 0;
     }
    

    Wie kann ich die Klassenfunktion LetterList aufrufen? 😕

    Danke schonmal
    Stefan



  • LetterList ist keine Klassenfunktion. Sie ist an ein Objekt gebunden, d.h. brauchst du ein Objekt. Leider sehe ich in deinem Quelltext erstmal nur NumberList. Auch weiss ich nicht, was deine typedefs da tun und machen.



  • Ja genau, ich versuch die Funktion LetterList aufzurufen.

    Die typdef dienen zum zugriff auyf die dll. Ich hab mir den Code aus dem netz zusammengebastelt..drum versteh ich auch nciht bis in die letzte Einzelheit.

    Hilft dir das weiter?



  • MrMoeste schrieb:

    Ja genau, ich versuch die Funktion LetterList aufzurufen.

    Nur das LetterList nicht die verlangte Signatur hat. Eine nicht-statische Methode (Funktion einer Klasse) benötigt im Gegensatz zu einer Funktion immer 2 Zeiger (Zeiger auf Methode und Zeiger auf Objekt).

    cu André


Anmelden zum Antworten