2012-03-08 3 views
20

node.js 응용 프로그램 내에서 특정 기본 Windows API 호출에 액세스하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 내 node.js 응용 프로그램에 필요한 기본 확장/추가 기능을 노드에 작성하고 JavaScript에서 호출하는 것입니다.Windows에서 node.js 기본 확장자를 만듭니다.

실제로 이러한 종류의 실행 파일을 실제로 컴파일하는 방법에 대한 자료는 어디에서 찾을 수 있습니까? 그것을 작성하는 방법에 대한 지침을 찾을 수 있지만 모든 빌드 지침은 Linux에 대한 것 같습니다. mingw에 g ++를 통해 컴파일하는 것이 좋지만 Visual Studio를 사용할 필요가 없습니다. 또한 확장 프로그램을 컴파일하기 위해 필요한 헤더 파일은 어디에서 찾을 수 있습니까?

답변

26

제가 생각하기에, node-ffi가 도움이 될 것입니다. 간단하고 작동합니다.

npm install ffi 
var FFI = require('ffi'); 

function TEXT(text){ 
    return new Buffer(text, 'ucs2').toString('binary'); 
} 

var user32 = new FFI.Library('user32', { 
    'MessageBoxW': [ 
     'int32', [ 'int32', 'string', 'string', 'int32' ] 
    ] 
}); 

var OK_or_Cancel = user32.MessageBoxW(
    0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1 
); 
+0

쿨, 내가 전에이 프로젝트를 본 적이 없어요. –

+5

중요 사항 : * FFI 통화와 관련하여 드문 간접비가 있습니다. 'strtoul()'의 하드 코딩 된 바인딩 버전을'strtoul()'의 FFI 버전과 비교하면 네이티브 하드 코딩 된 바인딩이 ** 5 배 ** 빠릅니다. 따라서 C 버전의 함수를 사용하는 것이 더 빠르기 때문에 사용하지 마십시오. FFI 호출에는 상당한 비용이 소요되므로 가치가 있습니다. * 즉, 원시 API 호출이 가끔은 괜찮 으면 좋겠지 만 많은 원시 호출을 수행하려는 경우에는 node-ffi의 상당한 오버 헤드를 피하기 위해 자신의 addon을 작성해야합니다. – josh3736

+0

중국어 문자가 출력으로 표시되는 이유는 무엇입니까? –

14

이것은 오래된 것입니다. 현재 nannode-gyp을 사용하여 여러 플랫폼에서 작동하는 기본 모듈을 작성하고 빌드하십시오.


나는이 고통을 직접 경험했습니다. Here's a guide that helped me get it working. (PDF) 노드가 이제 Windows에서 공식적으로 지원되므로 Visual Studio는 Windows on Node 용으로 권장되는 빌드 도구입니다. 기본적으로

:

  • Download와 노드의 소스 코드를 작성합니다.
  • VS에서 새 VC++ Win32 솔루션을 만들고, 그 다음에 마법사에서 응용 프로그램 유형으로 DLL을 선택하십시오. ATL/MFC가 선택되지 않았는지 확인하십시오.
  • addon을 작성하십시오. 예를 들어, here's one I wrote that gets Windows' current DNS settings. 특히 project's settings file (vcxproj)은 가장 까다로운 부분 중 하나가 모든 라이브러리 참조/경로 포함 설정을 가져 오기 때문에 관심의 대상이됩니다. 내 설정을 빌려 D:\node\을 노드 저장소의 위치로 바꿀 수 있습니다.