0

제 3 자 응용 프로그램의 COM 유형 라이브러리 (interop)를 사용하는 VS 코드 확장을 개발하고 싶습니다.VS 코드 확장에서 COM 유형 라이브러리 (interop)를 참조하는 방법은 무엇입니까?

이상적으로, Fable을 사용하여 F # (Fsharp)에서 확장을 작성하여 JS로 컴파일하는 것이 가장 이상적입니다. 어떤 경우 든 F #, C# 및 VB.NET에서 COM 라이브러리를 참조하고 사용할 수 있으며 필요한 경우 .NET 라이브러리를 래퍼로 제공 할 수 있습니다.

컨텍스트 : VS 코드 확장 개발을 처음 사용합니다. JavaScript 및 F # + Fable에서 hello world 확장을 컴파일했습니다. 아마도 이해할 수없는 것은 package.json 파일과 npm 패키지 관리자를 사용하여 라이브러리를 참조하는 방법입니다.

편집 : node.js 라이브러리 winax을 시도했지만 성공하지 못했습니다. 대안이 있습니까?

답변

1

동료가 VS 코드 확장 내에서 Winax (Node.js addon)을 처리 할 수있었습니다. 현재 버전 VS 코드에서 사용되는 Node.js 및 Electron의 동일한 버전에 대해 winax를 다시 컴파일하는 것이 중요합니다. (이 글을 쓰는 현재, 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로 업데이트 중입니다.

지금 나에게 마법처럼이

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

작품 =) 같은 인스턴스에 대한 VS 코드 확장에

+0

다행 이군. 나는 또한 원시 노드 모듈로 잠시 놀았지만 버전 요구 사항을 충족시키기 위해 끊임없이 문제가 발생했기 때문에이를 포기했습니다. 특히 Windows에서는 node.js가 일치하지 않는다는 오류가 계속 발생했습니다. –

0

접근법은 비교적 간단합니다. native node module을 작성해야합니다. 이 모듈은 사용할 COM 라이브러리의 형식 라이브러리를 가져 오는 데 사용할 수있는 C++ DLL입니다. 또한 V8에서 해당 COM 라이브러리로 호출을 변환하는 액세스 계층을 제공 할 수 있습니다.

+0

덕분에 많이 Winax을 사용합니다. C++ addons에있는 Node.js Docs를 보면 typelib을 가져 오는 방법에 대한 힌트가 필요할 수도 있습니다. 나는 내 C++ 기술이 녹슬고 제한되어 있음을 인정해야한다. 더 많은 도움을 주시면 감사하겠습니다. 감사! – lukasimir

+0

가장 좋은 방법은 C++ lib의 typelib 사용법을 찾는 것입니다 (여기에서 Q & A를 보았습니다.). 일단 C++ 라이브러리를 Node.js에 쉽게 통합 할 수 있어야합니다. –

+0

도움 주셔서 감사합니다. 마이크. 결국 우리는 Winax가 작동하도록했습니다. [내 대답] (https://stackoverflow.com/a/46112063/6454590)을 참조하십시오. – lukasimir