레거시 C 또는 C++ 응용 프로그램을 DLL로 변환하는 것은 자동화가 너무 번거로울 때 좋은 통합 선택이 될 수 있습니다. 또한 V8 API를 사용하여 노드에 대한 기본 C/C++ 모듈을 개발하는 복잡성을 피할 수 있습니다. 우리의 작은 js 예제를 실행하는 것은 우리에게 예상 출력을 제공해야합니다 : 당신이 먼저 내 예제를 다운로드 한 경우, 당신은 FFI 폴더로 가서화물 빌드를 수행해야합니다 –release 다음 네온 폴더로 (이전에 전 세계적으로 설치된 네온 – cli) 네온 빌드를 실행합니다. node-ffi를 사용하는 주요 부분 중 하나는 node.js Buffer 개체 위에 네이티브 데이터 형식을 빌드하기 위해 ref 모듈을 마스터하는 것입니다. 이러한 데이터 형식(int, 배열 등)을 사용하면 공유 라이브러리 내에 있는 기본 함수와 상호 작용할 수 있습니다. 내 예제 저장소의 모든 코드를 체크 아웃 할 수 https://github.com/peteyy/rust-url-parse 이 예제에서 사용할 수있는 라이브러리를 찾았습니다 – rust-url, 그래서 그들의 일을 위해 Servo 팀에 소리. register_module을 사용할 수 있는 #[macro_use] 특성을 확인합니다! 매크로를 사용하면 Node.js module.exports와 같은 모듈을 만들 수 있습니다. C 스타일 데이터 구조를 읽고 쓰는 기능을 제공하기 위해 node-ffi는 ref-struct 모듈과 호환됩니다. Struct 유형 정의에 대한 자세한 내용은 설명서를 참조하십시오.

반환된 Struct 생성자는 FFI`d 함수에 사용하기 위한 유효한 «형식»입니다(예: gettimeofday(): 2016년 말에 Node.js 모니터링 제품인 Trace에서 작업할 때 2017년 10월 Keymetrics와 최근 병합된 문제가 시작되었습니다. 이것은 이전 블로그 포스트에서 설명한 C ++에서 네이티브 Node.js 모듈을 작성하는 것과 비슷합니다. 안전하고 빠른 네이티브 Node.js 모듈을 작성하기 위한 Rust 바인딩. node-ffi는 Node.js 환경에서 순수 JavaScript를 사용하여 동적 라이브러리와 상호 작용하기 위한 강력한 도구 집합을 제공합니다. C++ 코드를 사용하지 않고 라이브러리에 대한 인터페이스 바인딩을 빌드하는 데 사용할 수 있습니다. 또 다른 주요 고려 사항은 C ++ 코드의 출력을 얻는 방법입니다. 예를 들어, 자동화 포스트에서 Node에서 독립 실행형 primesieve 응용 프로그램을 실행했습니다 . 공유 라이브러리에는 이 것을 원하지 않지만 출력이 호출자에게 반환되기를 원합니다. 이렇게하려면, 당신은 조금 창조적 인 얻을 필요가있을 수 있습니다 – 나는 아래 섹션에서 그것을 어떻게 했는지 보여줍니다. Send 함수가 Node.js 코드호출에서 전송되는 배열에 소수를 추가할 수 있기를 원합니다. 배포에 실행 파일을 포함할 때모든 종속성(예: .dlls)을 포함하거나 시스템에 설치해야 합니다. 응용 프로그램이 다른 플랫폼에서 실행되어야 하는 경우 플랫폼당 하나의 바이너리가 필요합니다.

그런 다음 런타임 동안 OS를 확인하고(예: os.type()를 통해) 실행할 적절한 파일을 선택해야 합니다. 따라서 NodeJS 응용 프로그램이 여러 플랫폼에서 실행되도록 하려면 빌드 시스템과 플랫폼별 링커 설정을 고려해야 합니다.