【问题标题】:How to reference a COM type library (interop) in a VS Code extension?如何在 VS Code 扩展中引用 COM 类型库(互操作)?
【发布时间】:2018-02-12 09:05:43
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案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
    

    Electron 版本可能需要在 --target=1.7.3 中更新。

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

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

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

    【讨论】:

    • 很高兴你能成功。我也玩了一段时间的原生节点模块,但因为不断地满足版本要求而放弃了。特别是在 Windows 上,我经常遇到 node.js 不匹配的错误。
    【解决方案2】:

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

    【讨论】:

    • 非常感谢。查看有关 C++ 插件的 Node.js 文档,...,我可能需要一些关于如何导入类型库的提示。我必须承认,我的 C++ 技能生疏且有限。我非常感谢您提供更多帮助。谢谢!
    • 最好是开始在任何 C++ 库中搜索类型库的使用(我已经在 SO 上看到了关于这个的问答)。一旦你解决了将你的 C++ 库集成到 Node.js 中应该很容易的问题。
    • 感谢迈克的帮助。最后,我们设法让 Winax 工作,请参阅 my own reply
    猜你喜欢
    • 2016-10-04
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2022-01-25
    • 2012-02-27
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多