DcmFileFormat을 dll안에서 memory alloc후 javascript에서는 handle 값을 이용한 함수 사용
1. NodeDCMTK.dll에 OpenDcmFileFormat
함수 추가
int OpenDcmFileFormat(char* fileName, void** dcmptr)
fileName을 char*
로 전달하고,
DcmFileFormat을 pointer로 alloc후 해당 file load후 handle을 2번째 void** dcmptr
로 전달 구현
int OpenDcmFileFormat(char* fileName, void** dcmptr) { DcmFileFormat *pDcmfileFormat = new DcmFileFormat(); OFCondition status = pDcmfileFormat->loadFile(fileName); if (!status.good()) return 0; *dcmptr = pDcmfileFormat; return 1; }
2. NodeDCMTK.js
javascript 파일에서 OpenDcmFileFormat
함수 선언 추가
var nodeDCMTK = ffi.Library('NodeDCMTK.dll', { ... 'OpenDcmFileFormat': ['int',['string',DcmFileFormatPtrPtr]] });
2번째 parameter가 void**
이기에 DcmFileFormatPtrPtr
형태로 선언
var DcmFileFormat = ref.types.void var DcmFileFormatPtr = ref.refType(DcmFileFormat); var DcmFileFormatPtrPtr = ref.refType(DcmFileFormatPtr);
3.index.js
에서 OpenDcmFileFormat을 DcmFileFormatPtrPtr으로 alloc된 변수를 전달
추후 해당 handle을 사용시는deref()
를 이용해 해당 void*
로 전달 사용
//call OpenDcmFileFormat var DcmFileFormat = ref.types.void var DcmFileFormatPtr = ref.refType(DcmFileFormat); var DcmFileFormatPtrPtr = ref.refType(DcmFileFormatPtr); var dcmFileFormat = ref.alloc(DcmFileFormatPtrPtr); var isSuccess = nodeDCMTK.OpenDcmFileFormat(fileName, dcmFileFormat); console.log("OpenDcmFileFormat::return=" + isSuccess.toString()); nodeDCMTK.test_voidptr_paramter(dcmFileFormat.deref());