OCX Funktionen in eigener DLL aufrufen



  • Hallo,
    ich habe ein Programm welches mir Zugriff über ein COM-Objekt (dll) ermöglicht.
    Diese Funktionen möchte ich gerne in einem anderen Programm nutzen, in dem aber nur 'normale' dll (extern "C") verwendet werden können (genauer
    http://udn.epicgames.com/Three/DLLBind.html

    Jetzt stecke ich nicht tief genug in diesem Windows COM/OLE/APL/MFC drin um sagen zu können ob das überhaupt möglich ist.
    Mir steht leider nur ein alter VC++6 Compiler zur Verfügung. Mit den neueren Express Versionen ist das einbinden von OCX leider nicht so einfach möglich.

    Ich habe unter meinem alten VC aber eine einfache MFC Applikation geschrieben, in der ich das OCX erfolgreich verwende. Die Funktionen habe ich über den Class Wizard importiert.

    Jetzt habe ich für meine dll ein neues Projekt "Win32 Dynamic Link Library" angelegt. In dieser ist der Class Wizard leider nicht verfügbar, darum habe ich die anderen vom Wizard erstellten Funktionen manuell in mein neues Projekt hineinkopiert, und auch alles erfolgreich übersetzt. Die DllMain musste ich löschen, da ich für das OCX die MFC benötige).

    Jetzt habe ich zum Testen eine zweite Konsolenanwendung erstellt, welche eine Funktion aus der dll aufrufen soll (dass meine Vorgehensweise mit der dll generell funktioniert habe ich an einer einfachen Funktion getestet).

    Wenn aber der Konstruktor des OCX aufgerufen wird, stürzt die Anwendung ab.
    Vom Hersteller wurde eine Wrapper-Klasse zur Verfügung gestellt, die ich verwendet habe.
    Über einen SmartPtr wird dann aber wohl laut Dokumentation der Konstruktor von CoCreateInstance aufgerufen:

    m_ptr(OLESTR("name-des-OCX"), NULL, CLSCTX_INPROC_SERVER)
    

    Sobald ein Objekt der Wrapper-Klasse mit new erzeugt wird, stürzt die Anwendung ab.

    Vielleicht hat ja jemand einen Tip für mich, Stichworte in welcher Richtung ich nach Lösungen suchen könnte.

    Momentan seh ich vor lauter OCX, DLL, ATL, MFC-Bäumen keinen Wald mehr.

    Gruß
    Thomas



  • Bin doch noch ein Stück weiter gekommen.

    Ich habe jetzt diese Wrapper-Klasse mit dem Smart Pointer außen vor gelassen, und alles selber mit
    CoInitialize, CoCreateInstance, Funktionen über den Interface-Pointer aufrufen, CoUninitialize
    gelöst. Dann funktioniert es.

    Warum das über die Wrapper-Klasse in dieser Anwendung nicht, aber in der anderen funktioniert hat, weiß ich allerdings immer noch nicht.


Anmelden zum Antworten