C++ Klasse als DLL unter VB verfügbar machen



  • Hallo,
    ich suche nach einer gescheiten anleitung wie ich eine C++ Klasse in einer DLL unter VB 6 verfügbar mache. Google lieferte wenig Hilfe.

    Problem: Es soll in C++ eine DLL geschrieben werden die auch aus VB herraus aufrufbar ist
    Allerdings scheitert es daran VB die C++ Klasse bekannt zu machen.
    Ich hab gelesen das ich um das zu umgehen Wrapperfunktionen schreiben darf.

    Danke schonmal im voraus für Hilfe 🙂



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hi,
    so weit ich weiss kannst du keine in eine DLL ausgelagerten C++-Klassen in einem VB-Programm aufrufen (das geht gerade einmal bei C++ Programmen untereinander und dem selben Compiler).
    Das Problem ist, dass die interne Namensgebung bei thiscall (die Aufrufkonvention bei Methoden) nicht standardisiert ist.
    Im allgemeinen exportiert man C-Funktionen. Wenn du intern in der DLL eine Klasse verwendest musst du die von dir bereits erwaehnten Wrapperfunktionen schreiben, welche quasi eine Methode der Klasse als C-Funktion kapseln.

    Edit:
    Noch ein bisschen mehr dazu:

    class Foo
    {
    public:
      int MacheWas(int i); // die Funktion soll genutzt werden
    };
    

    Beispiel fuer eine Wrapperfunktion:

    // irgendwo liegt ein (fuer die DLL) globales Objekt der Klasse Foo namens foo
    
    extern "C" /*noetig bei C++ Compilern)*/ int __declspec(dllexport) /* zum Exportieren*/ MacheWas(int i)
    {
      return foo.MacheWas(i);
    }
    

    Das mal als (ungetestetes) Beispielschnippsel.

    Edit2:
    Und das ganze muesste sich unter VB dann so bekanntmachen lassen (bin kein VB Spezi, hatte damit noch nie was am Hut^^):

    Declare Function MacheWas Lib "DLLName.dll" (ByVal i As Integer) As Integer
    

    Gruss,
    DeSoVoDaMu


Anmelden zum Antworten