1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
LPVOID lpData = NULL;
LPSTREAM lpAttachStream;
for(int i = 6; (i < text_file.size()); i++)
{
ULONG ulAttachNum = 0;
LPSTREAM lpAttachStream;
hr = lpMessage->CreateAttach(NULL, 0, &ulAttachNum, &attachment);
if (FAILED(hr))
break;
hr = lpMessage->OpenProperty(PR_ATTACH_DATA_BIN, &IID_IStream, 0, MAPI_CREATE | MAPI_MODIFY, (LPUNKNOWN *)&lpAttachStream);
CreateStreamOnHGlobal(NULL, TRUE, &lpAttachStream);
HANDLE hFile = CreateFile(text_file[i].c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0,NULL);
// Free the buffer.
// LocalFree( lpMsgBuf );
if ( hFile != INVALID_HANDLE_VALUE)
{
//alocate memory on global
nBytes = GetFileSize( hFile, NULL);
if ( ( hMem = GlobalAlloc( GMEM_MOVEABLE, nBytes)) != NULL)
{
//read file content in global allocated mem
if ( ( lpData = GlobalLock( hMem)) != NULL)
{
ReadFile( hFile, lpData, nBytes, &nBytes, NULL);
GlobalUnlock( hMem);
}
}
::CloseHandle( hFile);
}
ULONG ulBytesWritten = 0;
ULONG ulSize = 0;
// Write the body to the stream
hr = lpAttachStream->Write((const void*)lpData, (ULONG)&ulSize, (ULONG*)&ulBytesWritten);
// Commit the stream
hr = lpAttachStream->Commit(NULL);
if (FAILED(hr))
{
MessageBox(NULL,"Unable to commit stream",NULL,MB_OK);
}
// Release the memory
hr = lpAttachStream->Release();
// free global alocated memory
if ( hMem)
GlobalFree( hMem);
if (FAILED(hr))
{
MessageBox(NULL,"Unable to release memory",NULL,MB_OK);
// goto cleanup;
}
// Save the changes to the message
lpMessage->SaveChanges(KEEP_OPEN_READWRITE);
|