// This function will write the contents of the target
// data for the passed capture object to a disk file
void WriteTargetMemory(LPCWSTR lpwszFileName, IltmmCapture *pCapture)
{
HANDLE hFile = NULL;
// open file for output
hFile = CreateFile(lpwszFileName, // open file name
GENERIC_WRITE, // open for writing
FILE_SHARE_READ, // share for reading
NULL, // no security
CREATE_ALWAYS, // re-create the file
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
return;
long fl = 0;
unsigned long lBytesWritten;
IltmmMemory *pTarget = NULL;
// try to get the target stream
pCapture->get_TargetStream((IUnknown**)&pTarget);
if(!pTarget)
return;
VARIANT varData;
unsigned char *pBuffer = NULL;
SAFEARRAY sa;
// get the buffer size and initialize a variant
pTarget->get_BufferSize(&fl);
VariantInit(&varData);
// setup the safe array
memset(&sa, 0, sizeof(sa));
sa.cbElements = sizeof(unsigned char);
sa.cDims = 1;
sa.fFeatures = (FADF_AUTO | FADF_FIXEDSIZE);
sa.pvData = new UCHAR[fl];
sa.rgsabound[0].cElements = fl;
// associate the safe array with our variant
V_VT(&varData) = (VT_ARRAY | VT_UI1);
V_ARRAY(&varData) = &sa;
// copy the target data to the variant safe array and to our buffer
pTarget->CopyData(0, fl, &varData);
SafeArrayAccessData(V_ARRAY(&varData), (void**)&pBuffer);
// write the buffer out to our file
WriteFile(hFile, pBuffer, fl, &lBytesWritten, NULL);
// clean up the variant
SafeArrayUnaccessData(V_ARRAY(&varData));
VariantClear(&varData);
// close the output file
CloseHandle(hFile);
// release the target object
pTarget->Release();
}
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET