COM-DLL erstellen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von xxgamerz.

    COM-DLL erstellen

    Hi Com,

    Ich habe da ein kleines... Problemchen. Ich will in VB eine Com-DLL erstellen, habe mir auch das hier angesehen,.

    Zu meinem Problem: Wenn ich eine neue GUID generiere, wo muss ich die einfügen? In C++, oder die DLL & wo genau? Ich habe es schon hier drin versucht:

    VB.NET-Quellcode

    1. <Microsoft.VisualBasic.ComClass(Test.ClassId, Test.InterfaceId, Test.EventsId)>
    2. Public Class Test
    3. #Region "COM-Class-Definition"
    4. Public Const ClassId As String = "F12E752F-63CC-45e9-82F6-0A3E03057B6B" 'Hier
    5. Public Const InterfaceId As String = "7BE79C30-0887-4a75-BECD-C42F9E0B96C2"
    6. Public Const EventsId As String = "D09BBF85-9E33-46e8-918F-FA7326F92C89"
    7. Public Sub New()
    8. MyBase.New()
    9. End Sub
    10. Public Sub Test(ByVal IP As String, ByVal Online As Boolean)
    11. If My.Computer.Network.Ping(IP) = True Then
    12. MsgBox("Online!", MsgBoxStyle.Information, "")
    13. Online = True
    14. End If
    15. End Sub
    16. #End Region
    17. End Class

    InterfaceID und EventsID habe ich eben kein Plan was ich damit machen soll, aber wenn ich die Datei in C++ verwenden will, kommt der Fehler:

    Quellcode

    1. error C3861: "Test": Bezeichner wurde nicht gefunden.


    Danke schonmal für die Hilfe!
    In C++ sieht das etwa so aus:

    Quellcode

    1. [ uuid(B4F4CCF4-C336-11D3-A180-00C04FC34C0B), version(1.0) ]
    2. library MyLibrary
    3. {
    4. importlib("stdole32.tlb");
    5. importlib("stdole2.tlb");
    6. // Primary dispatch interface for CMyLibraryDoc
    7. [ uuid(B4F4CCF5-C336-11D3-A180-00C04FC34C0B) ]
    8. dispinterface IMyLibrary
    9. {
    Die must Du in C++ selbst beim Anlegen des Projektes generieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn Du das Projekt (unter C++) als COM-Objekt anlegst, generiert das die Entwicklungsumgebung alles automatisch.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So mir bekannt ist, ist die Erstellung von COM-Objekten unter .NET nicht möglich.
    Dies geht z.B. unter C++.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Probier aus, wie es da beschrieben steht.
    Eine GUID wird unter Extras -> GUID erstellen generiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    So mir bekannt ist, ist die Erstellung von COM-Objekten unter .NET nicht möglich.


    COM-Dll's kannst Du natürlich unter VB.NET erstellen, aber eben nur diese und keine ActiveX-Objects oder sowas ... das geht dann wirklich nur über C++.

    @ xxgamerz

    Jede der 3 Einträge in der COM-Class braucht seine eigene GUID. Die musst Du selbst erstellen, allerdings nur wenn Du nicht die Voll-Version von VS hast. In der Voll-Version wählst Du einfach als Vorlage "COM-Klasse" aus und der gesamte Deklarations-Teil ist dann bereits erstellt inkl. aller GUID's.

    Wie Du das Teil dann richtig in C++ einbindest, entzieht sich meiner Kenntnis. Eine VB.NET-Dll in C# einzubinden ist problemlos möglich, aber eine VB.NET-Com-Dll in C++ ... puuuhhh ... ich glaube das gibt richtig Probleme. Spätestens bei den Datentypen wird es ja irgendwo richtig eng im Karton.

    Aber gut ... darauf sollen Dir dann besser der C++ Profis antworten. ;)

    Gruß

    Rainer
    @Vatter: Danke, das schein übersichtlicher zu sein als mein Fund. Werde es gleich durchforsten.

    @raist10: Ich habe die Testversion von VS 2010 Prof, da gibts die Com-Klasse auch. In C++ denke ich bekomme ich keine Probleme, höchstens bei String's, aber die kann ich doch auch als Char definieren, oder? String gibts in C++ ja nicht, Char schon


    Muss ich sonst noch was beachten, oder kann ich da jetzt ganz norman, wie in eine VB-DLL coden?