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

问题描述:

我想开发一个VS代码扩展,它使用第三方应用程序的COM类型库(interop)?如何在VS代码扩展中引用COM类型库(interop)?

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

上下文:我是VS Code扩展开发新手。我设法在JavaScript和F#+ Fable中编译了hello world扩展。我可能不明白的是如何使用package.json文件和npm包管理器来引用库。

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

一位同事设法让Winax(Node.js插件)在VS代码扩展中工作。重新编译winax是针对当前版本VS代码中使用的相同版本的Node.js和Electron。 (在写作的时候,VS Code 1.16.0使用Node.js的7.4.0和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

现在使用Winax在VS代码扩展比如像这样

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

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

+0

很高兴你能工作。我也花了一段时间与本地节点模块,但放弃了,因为经常遇到麻烦,以满足版本要求。特别是在Windows上,我经常发现node.js不匹配的错误。 –

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

+0

非常感谢。查看C++插件上的Node.js文档,...,我可能需要一些提示,以了解如何导入typelib。我必须承认,我的C++技能很生疏且有限。我非常感谢任何帮助。谢谢! – lukasimir

+0

最好是开始在任何C++库中搜索typelibs的用法(我已经在这里看到了关于这个问题的Q&A)。一旦你解决了,应该很容易将你的C++库集成到Node.js中。 –

+0

感谢您的帮助迈克。最后,我们设法让Winax工作,看看[我自己的回复](https://*.com/a/46112063/6454590)。 – lukasimir