본문 바로가기
프로그래밍/Node.js

Node.js에서 C/C++ 코드 호출하기: ffi-napi의 기초 (프로젝트 소스 포함)

by 꾸션 2023. 3. 13.

Node.js는 JavaScript로 구성된 애플리케이션을 작성하는 데 사용됩니다. 그러나 때로는 JavaScript로 구현하기 어려운 작업이 필요하고 이 때 C/C++ 코드를 사용해야 합니다. 이런 경우에 Node.js에서 C/C++ 코드를 호출하고 결과를 처리하는 방법에 대해 알아보겠습니다.

 

ffi-napi란?

ffi-napi는 Node.js에서 C/C++ 코드를 호출하고 상호작용하기 위한 모듈 중 하나입니다. ffi-napi는 Foreign Function Interface(FGI) 라이브러리로, Node.js의 네이티브 C++ 모듈을 사용하지 않고도 C/C++ 함수를 호출할 수 있습니다.

 

ffi-napi는 모든 운영 체제에서 작동하며, Node.js의 최신 버전에서도 지원됩니다. ffi-napi를 사용하면 C/C++ 코드를 호출하고 결과를 Node.js 애플리케이션으로 가져올 수 있으므로 Node.js 애플리케이션을 더욱 확장 가능하고 유연하게 만들 수 있습니다.

 

ffi-napi를 사용한 C/C++ 함수 호출하기

ffi-napi를 사용하여 C/C++ 함수를 호출하려면 먼저 ffi-napi 모듈을 설치해야 합니다. 다음 명령어를 사용하여 ffi-napi 모듈을 설치할 수 있습니다.

npm install ffi-napi

ffi-napi 모듈을 설치한 후에는 다음과 같이 C/C++ 함수를 호출할 수 있습니다.

const ffi = require("ffi-napi");

// DLL 파일의 경로와 함수 이름을 지정합니다.
const dll = ffi.Library("mydll.dll", {
  "add": ["int", ["int", "int"]],
});

// C/C++ 함수를 호출합니다.
const result = dll.add(1, 2);

console.log(result); // 3

위 예제에서는 "mydll.dll" DLL 파일의 "add" 함수를 호출합니다. "add" 함수는 두 개의 정수를 매개변수로 받아서 더한 값을 반환합니다. ffi-napi를 사용하여 "add" 함수를 호출하면 반환값인 3을 출력할 수 있습니다.

 

결론

ffi-napi를 사용하면 Node.js에서 C/C++ 코드를 호출하고 결과를 처리할 수 있습니다. ffi-napi를 사용하면 Node.js 애플리케이션을 더욱 확장 가능하고 유연하게 만들 수 있습니다. 위 예제를 참고하여 ffi-napi를 사용하여 C/C++ 코드를 호출해 보시기 바랍니다.

 

추가사항 - 프로젝트 소스

소스를 요청하시는 분들이 계셔서 node.js, C++프로젝트 파일 올려드립니다.

개발환경은 아래와 같습니다. 개발환경이 다른경우 프로젝트 파일을 변경 후 사용하세요.

 

  • 시스템: Windows 10 64비트
  • node.js: v18.13.0
  • Visual Studio 2019: v16.11.7

 

node.js프로젝트 안에는 64비트로 컴파일된 mydll.dll이 들어가 있습니다.

 

Node.js 프로젝트

test.zip
0.01MB

 

Visual Studio C++ DLL 프로젝트

mydll.zip
0.00MB

 

 

 

ffi-napi

A foreign function interface (FFI) for Node.js, N-API style. Latest version: 4.0.3, last published: 2 years ago. Start using ffi-napi in your project by running `npm i ffi-napi`. There are 296 other projects in the npm registry using ffi-napi.

www.npmjs.com

 

연습: 자체 동적 연결 라이브러리 만들기 및 사용(C++)

C++를 사용하여 Visual Studio에서 Windows DLL(동적 연결 라이브러리)을 만듭니다.

learn.microsoft.com

반응형

댓글