COM Type-Libraries referenzieren die nicht am System registriert sind



  • Welche Möglichkeiten gibt es COM Type-Libraries zu referenzieren, ohne dass diese am Build-System registriert sind?

    In C++ geht das so schön einfach mit #import, aber in C#?



  • Hmmm....

    Ist es ausreichend/OK einfach mit tlbimp/aximp eine .NET DLL zu erstellen, und dann diese im Projekt zu referenzieren?

    Und ... gibt es Primary Interop Assemblies für COM Komponenten von Microsoft? Also z.B. das Web-Browser Control in SHDocVw.dll o.Ä.
    Und wenn ja, wo?


  • Administrator

    hustbaer schrieb:

    Welche Möglichkeiten gibt es COM Type-Libraries zu referenzieren, ohne dass diese am Build-System registriert sind?

    Irgendwie versteh ich hier nicht so ganz was du meinst. Eine COM-Library fügt man einfach als Referenz hinzu wie jede andere .Net Library. Zumindest habe ich das bisher so gemacht. Wo liegt da das Problem? 😕

    Aber soweit ich weiss, kannst du auch über tlbimp gehen. Wird glaube ich empfohlen, wenn man die DLLs signieren will.

    Bin aber ehrlich gesagt auch nicht unbedingt der Experte in dem Bereich. Habe bisher nur in ein paar Testprojekten direkt COM Libraries verwendet.

    Grüssli



  • Ich will die Projekte auf jedem PC bauen können wo die nötigen Build-Tools (Visual Studio, SDKs, DDKs etc.) installiert sind.

    Wenn man "ganz normal" eine COM Referenz zu einem .NET Projekt hinzufügt, also über klicksi-klicksi im Visual Studio, dann speichert VS im Projekt-File bloss die GUID der Type Library, und sucht diese dann in der Registry wenn compiliert wird.
    Und erzeugt daraus dann die Interop.* bzw. AxInterop.* DLLs.

    Wenn die referenzierte COM DLL bzw. der COM Server auf dem Build-PC nicht installiert sind bekommt mal lustige Fehlermeldungen. Bzw. auch wenn dort eine ältere Version registriert ist.

    Erstelle z.B. ein Projekt das das SHDocVw.DWebBrowserEvents2 Interface enthält verwendet explizit implementiert auf einem PC wo IE 8 installiert ist, und versucht das Ding dann auf einem PC wo bloss IE 7 drauf ist zu kompilieren. Wird nicht funktionieren. Weil bei IE 8 neue Events dazugekommen sind. Und VS beim Kompilieren eben die TLB vom Build-System nimmt, und nicht die die man eigentlich haben wollte.

    Daher die Frage: wie geht man damit am besten um?


Anmelden zum Antworten