Frage

Wir verwenden unsere .NET Assembly DLL in native C ++ über COM (CCW). Jedes Mal, wenn ich ein neue Version meiner DLL machen, ich habe zwei Dateien senden (.dll und entsprechende TLB) zu Mannschaft, die es in ihrem Code verwendet wird.

Ist es möglich, TLB-Datei als Ressource in .NET-DLL-Datei einbetten?

War es hilfreich?

Lösung

Es ist nicht gerade einfach dies mit Visual Studio .NET zu tun, aber es kann getan werden. Auf einer grundlegenden Ebene, was Sie tun müssen, ist dies:

  1. Generieren Sie Ihre TLB-Datei, zum Beispiel "YourLibrary.tlb".

  2. Erstellen Sie eine Ressource-Skriptdatei Win32 genannt, zum Beispiel "YourLibrary.rc" mit einem Texteditor (wie Editor oder Datei / Neu / Datei ... / Textdatei in Visual Studio).

  3. In der Skriptdatei geben Sie den folgenden Text im Wortlaut (aber ersetzen Ihre tatsächlichen TLB Dateinamen natürlich):

    1 typelib "YourLibrary.tlb"

  4. Sie die Skriptdatei auf den gleichen Ordner wie die TLB-Datei speichern.

  5. Von einer Visual Studio-Eingabeaufforderung, mit der Skriptdatei in die Ordner ändern und kompilieren Sie es mit dem folgenden Befehl:

    rc YourLibrary.rc

    Dies wird eine Win32-Ressource-Datei im selben Ordner erzeugt namens "YourLibrary.res".

  6. In Visual Studio, klicken Sie rechts den Projektknoten (zum Beispiel "Yourlibrary") im Solution Explorer und wählen Sie Eigenschaften.

  7. Auf der Registerkarte Anwendung unter "Ressourcen", wählen Sie die "Resource File" Option und durchsucht 5 auf den "YourLibrary.res" -Datei aus Schritt.

  8. Speichern und das Projekt neu.

Der TLB wird nun als Ressource in der DLL eingebettet werden, so dass andere COM-Anwendungen gelesen werden können.

Wenn Sie die TLB-Datei regenerieren später müssen Sie Schritt 5 wiederholen, um die Ressource-Datei neu zu kompilieren, und Schritt 8 die neue Version in der DLL einzubetten.

Alles, was gesagt, Sie in der Lage sein kann, einige dieser mit Build-Events oder indem benutzerdefinierte MSBuild Ziele in der Projektdatei zu automatisieren, aber das ist eine ganz andere Diskussion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top