0

Ich möchte eine VS-Code-Erweiterung entwickeln, die eine COM-Typ-Bibliothek (Interop) einer Drittanbieteranwendung verbraucht?Wie referenziert man eine COM-Typ-Bibliothek (Interop) in einer VS-Code-Erweiterung?

Idealerweise möchte ich die Erweiterung in F # (Fsharp) mit Fable schreiben, um sie zu JS zu kompilieren, aber das ist nicht unbedingt notwendig. In jedem Fall kann ich die COM-Bibliothek von F #, C# und VB.NET referenzieren und verwenden und bei Bedarf eine .NET-Bibliothek als Wrapper bereitstellen.

Kontext: Ich bin neu in VS Code Erweiterung Entwicklung. Ich habe es geschafft, eine Hallo-Welt-Erweiterung in JavaScript und in F # + Fable zu kompilieren. Was ich wahrscheinlich nicht verstehe, ist die Verwendung der Datei package.json und des Paketmanagers npm, um auf die Bibliothek zu verweisen.

Edit: Ich habe versucht, die node.js-Bibliothek winax, aber ohne Erfolg. Gibt es eine Alternative?

Antwort

1

Ein Kollege hat Winax (Node.js Addon) innerhalb der VS-Code-Erweiterung arbeiten. Es ist wichtig, Winax gegen die gleiche Version von Node.js und Electron neu zu kompilieren, die in der aktuellen Version VS Code verwendet wird. (Zum Zeitpunkt des Schreibens verwendet VS Code 1.16.0 Node.js 7.4.0 und 1.7.3 Electron.)

in der Befehlszeile (in der Verlängerung Projektordnern) haben

npm install --save winax 
cd node_modules\winax 
node-gyp configure 
node-gyp build 
cd ..\.. 
npm rebuild winax --runtime=electron --target=1.7.3 --disturl=https://atom.io/download/atom-shell --build-from-source 

Die Electron Version benötigen Aktualisierung in --target=1.7.3.

verwenden Jetzt Winax in der VS-Code Erweiterung zum Beispiel ähnlichen

var winax = require('winax'); 
var excel = new winax.Object("Excel.Application"); 
excel.visible = true; 

wirkt wie ein Zauber für mich =)

+0

Ich bin froh, dass es funktioniert hat. Ich habe auch eine Weile mit nativen Knotenmodulen gespielt, aber wegen ständiger Probleme, die Versionsanforderungen zu erfüllen, aufgegeben. Gerade unter Windows habe ich ständig Fehler bekommen, die node.js nicht zutreffen würde. –

0

Der Ansatz ist relativ einfach. Sie müssen eine native node module schreiben. Dieses Modul ist eine C++ - DLL, mit der Sie die Typelib für die COM-Bibliothek importieren können, die Sie verwenden möchten. Es kann auch eine Zugriffsebene bereitstellen, die Aufrufe von V8 in diese COM-Bibliothek übersetzt.

+0

Vielen Dank. Wenn ich mir die Node.js Docs für C++ Addons, ... anschaue, brauche ich vielleicht ein paar Hinweise, wie man die Typelib importiert. Ich muss zugeben, meine C++ - Kenntnisse sind rostig und begrenzt. Ich würde mehr Hilfe schätzen. Vielen Dank! – lukasimir

+0

Am besten ist es, nach der Verwendung von Typelibs in einer beliebigen C++ - Bibliothek zu suchen (ich habe Q & A dazu hier auf SO gesehen). Sobald Sie es gelöst haben, sollte es einfach sein, Ihre C++ - Bibliothek in Node.js zu integrieren. –

+0

Danke für deine Hilfe Mike. Am Ende haben wir Winax zur Arbeit gebracht, siehe [meine eigene Antwort] (https://stackoverflow.com/a/46112063/6454590). – lukasimir

Verwandte Themen