DLL importieren



  • Hallo zusammen,

    ich habe in VB.Net eine DLL erzeugt, die ich nun in eine MFC-Anwendung(exe) unter Visual Studio C++ 6 einbinden möchte.

    Die DLL, die mit VS2005 erzeugt wird hat die Eigenschaft "Kompilieren->Für COM-Interop registrieren". Ich habe zuerst versucht, diese DLL in einer VB6-Anwendung zu verwenden, wo es auch ohne Probleme funktioniert. Ich konnte über "Projekt->Verweise" die DLL in das Projekt einbinden und auch ganz einfach im Programmcode nutzen.

    Nun möchte ich wie schon erwähnt, diese DLL auch in einer MFC-Anwendung unter VC++6 nutzen und einbinden können. Ich habe schon einige Stunden im Internet recherchiert, konnte aber bis jetzt das Programm nicht zum laufen bringen...

    Es wird einmal von

    #import "XXX.tlb"

    gesprochen

    dann von

    LoadLibrary()

    etc.

    Nun meine Frage..

    1. Könnt ihr mir sagen, um welchen Typ es sich bei meiner unter VB.Net entwickelten DLL handelt? Es könnte gibt ja verschiedene Arten von DLLs wie z.b. ActiveX etc. Leider ist die DLL-Programmierung für mich eher Neuland und daher wollte ich mal nachfragen.

    2. Könnt ihr mir bei meinem Problem helfen? Könnt ihr mir sagen, wie ich die DLL eingebunden bekomm, so dass ich auf die Funktionalität der DLL zugreifen kann? Wie mach ich das? Habt ihr ein Beispiel, dass dieses Problem exakt behebt?

    Ich stelle mir den Vorgang prinzipiell so vor:

    1. Importieren der DLL: z.B. #import "Test.dll"

    2. Die DLL kapselt 2 Klassen... von diesen zwei Klassen also jeweils eine Instanz anlegen: z.B. Class1 cTest1 = new Class1()

    3. Mit der Instanz die Methoden aufrufen: cTest1.AddNewCounter("Test") etc.

    Kann das so funktionieren?

    Noch als Hinweis: Ich habe den Assistenten benutzt, um mir ein Grundgerüst für die MFC-Anwendung automatisch erstellen zu lassen. Bitte sagt auch dazu, wo ich den import der DLL durchführen soll (Header oder Quellcodedateien?). Vielen Dank im Voraus.

    Gruß



  • Hallo,

    ich habe nun doch das Problem selbst lösen können. Für alle diejenigen, die es interessiert die Lösung.

    Hinweis: Ich konnte das Problem leicht mit dem Artikel von Herrn Stegemann lösen
    Link: http://www.fstsoft.de/com.htm#Import%20von%20Typelibraries%20in%20C++%20Projekte

    1.Schritt:
    In der Datei "StdAfx.h" folgende Informationen einfügen

    #import <...\Name_der_Tybe_Library.tlb>
    using namespace Name_des_Namespaces_in_der_Tybe_Library;
    

    2.Schritt:
    In der Programmdatei (cpp) folgenden Code einfügen

    HRESULT hr;
    
    //Name_des_Namespaces_in_der_Tybe_Library::Interface_Class_Name
    //hier ein Beispiel 
    OLE_Test::_COleManipulation ptrTest;
    
    if(FAILED(hr = ptrTest.CreateInstance(__uuidof(COleManipulation)) ))
    {
       _com_issue_error(hr);
    }
    
    //Funktionsaufruf
    ptrTest->Add(1,2)
    

    Ich hoffe, ihr könnt mit der Hilfe etwas anfangen.

    Gruß


Anmelden zum Antworten