如何在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;
就像一个魅力对我来说=)
答
该方法相对简单。你必须写一个native node module。该模块是一个C++ DLL,您可以使用它来导入要使用的COM库的typelib。它还可以提供一个将来自V8的调用转换为该COM库的访问层。
很高兴你能工作。我也花了一段时间与本地节点模块,但放弃了,因为经常遇到麻烦,以满足版本要求。特别是在Windows上,我经常发现node.js不匹配的错误。 –