如何在VS代码扩展中引用COM类型库(interop)?

时间:2017-09-04 06:55:36

标签: com visual-studio-code interop vscode-extensions typelib

我想开发一个VS代码扩展,它使用第三方应用程序的COM类型库(互操作)?

理想情况下,我想用Fable编写扩展名F#(Fsharp)将其编译为JS,但这并非完全必要。在任何情况下,我都可以引用和使用F#,C#和VB.NET中的COM库,并在需要时提供.NET库作为包装。

背景信息:我是VS Code扩展开发的新手。我设法用JavaScript和F#+ Fable编译一个hello world扩展。我可能不太了解的是如何使用package.json文件和npm包管理器来引用库。

编辑:我尝试了node.js库winax,但没有成功。还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

一位同事设法让Winax(Node.js插件)在VS Code扩展中工作。对于当前版本VS Code中使用的相同版本的Node.js和Electron重新编译winax非常重要。 (在撰写本文时,VS Code 1.16.0使用Node.js 7.4.0和Electron 1.7.3。)

在命令行中(在扩展项目文件夹中)执行

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

电子版可能需要在--target=1.7.3更新。

现在在VS Code扩展中使用Winax,例如

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

对我来说就像魅力一样=)

答案 1 :(得分:0)

方法相对简单。你必须写一个native node module。此模块是一个C ++ DLL,您可以使用它来导入要使用的COM库的类型库。它还可以提供一个访问层,用于将调用从V8转换为该COM库。