In VB erstellte DLL in C einbinden



  • Hallo Leute,

    Ich habe ein in Visual Basic erstelltes Projekt mit einer Klasse, welche eine Funktion beinhaltet. Die Klasse findet sich dann in einer DLL wieder.

    Das Problem ist, daß ich jetzt aus einem C-Skript heraus eine Instanz der Klasse aus der DLL heraus erzeugen muss, um dann die Funktion aufzurufen.

    Ich habe leider keine Ahnung, wie so etwas in C funktioniert.
    Danke für euere Antworten



  • c hat keine klassen.
    hast du eine .dll oder eine .ocx?
    welches MS basic?



  • Ich habe eine VB-DLL. Keine OCX.

    Ich denke, letztlich reduziert sich das Problem auf die Fragestellung, wie spreche ich eine COM Componente aus einem C-Programm heraus an,
    denn nichts anderes ist deine VB-DLL. Aber wie das funktioniert, weiß hier in meinem Umfeld leider auch keiner!

    Wäre es eine Lösung, wenn ich die Funtionalität wrappe. Also wenn ich die VB-DLL in ein MFC C++ Projekt einbinde und daraus wieder eine DLL generiere, die eine C-konforme Schnittstelle implementiert?

    Ich weiß nicht, ob das zu kompliziert und umständlich ist, ist aber die einzige Lösung, die mir einfällt



  • ich verschieb dich mal lieber nach winapi, die haben vll ahnung, wie man COM verwendet.



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI 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.



  • Du kannst es entweder direkt ansprechen (via #import)
    http://msdn2.microsoft.com/8etzzkb6
    oder Du kannst z.B. Late-Binding verwenden. Siehe:
    http://blog.kalmbachnet.de/?postid=63



  • Danke,

    ich habe das Late-Binding mal ausprobiert. Und habe noch folgendes Problem:

    Ich habe eine VB-Dll in der eine Klasse existiert aus der ich eine Methode aufrufen möchte. Das möchte ich aber von Standart C aus tun. Das funktioniert bereits.

    Leider funktionieren die Helperfunktions noch nicht so richtig. Ich denke ich rufe sie irgendwie falsch auf:

    extern "C" BOOL EXPORT call_restoreControlByName (char* controlname)
    {
    LPDISPATCH pdispVBObject;
    int hilf = 1;
    hilf = CreateObject(OLESTR("restoreWinCC.Restore"), &pdispVBObject);
    if (hilf != 0)
    return FALSE;
    hilf = Invoke(pdispVBObject, DISPATCH_METHOD, NULL, NULL, NULL,
    "restoreControlByName", TEXT("s"), TEXT(controlname));
    pdispVBObject->Release();
    if (hilf == 0)
    return TRUE;
    else
    return FALSE;
    }

    Das ist meine Funktion mit der C-konformen Schnittstelle. Muss ich die Funktionen anders aufrufen?

    Ich brauche dringend eine Antwort.
    Danke schonmal



  • Oh Sorry.
    Zur Erklärung.

    restoreWinCC ist die VB-Dll
    Restore ist die Klasse
    restoreControlByName ist die Methode
    controlname ist der Parameter



  • Du musst als Parameter einen "BSTR" übergeben!!! Also mit SysAllocString allokieren (und nach dem Aufruf mit SysFreeString wieder freigeben).
    Und beacht, dass Du zurvor den String nach UNICODE konvertieren musst (z.B. mittels CA2CW.



  • Ah ja. Ich verstehe leider nicht so wirklich was du meinst.

    Meinst du die CreateObject Funktion, oder die Invoke?

    Kannst du mir ein Stück code posten, wie man so etwas macht? Dann kann ich mir das eventuell besser vorstellen.



  • Ich weiß mitlerweile, daß sich mein Problem auf die Frage beschränkt: Wie binde ich ein COM-Objekt in ein C++-Projekt ein.

    Wenn jemand einen nützlichen Tip oder einen Link hätte, der weiterhilft, wär ich echt dankbar.


Anmelden zum Antworten