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());