// ATS4DemoDlg.h : header file // #if !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_) #define AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "stdafx.h" //#include "log4nb.h" class Deliver { public: Deliver(const TCHAR * imageFilename,log4nb * logger); BOOL openMapfile(); CString getFilename(); BOOL receiveFile(LPCTSTR tempFilename); BOOL resultWriteBack(LPCTSTR resultXml); private: log4nb * De_logger; protected: TCHAR mtcImageFilename[250]; HANDLE mhFile; INT64 lpMapAddress; }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ATS4DEMODLG_H__32E6642D_5F67_4613_B312_9C160914A930__INCLUDED_)
#include "StdAfx.h" #include "Deliver.h" //#include "Log.h" Deliver::Deliver(const TCHAR *imageFilename,log4nb * logger) { strcpy_s(mtcImageFilename,sizeof(mtcImageFilename),imageFilename); De_logger = logger; } CString Deliver::getFilename() { De_logger->tmWrite("getFilename() begin"); CString temp; temp = mtcImageFilename;//.Format("%s",mtcImageFilename); De_logger->tmWrite("getFilename() end"); return temp; } BOOL Deliver::openMapfile() { De_logger->tmWrite("openMapfile() begin"); if( NULL == mtcImageFilename ) { TRACE(_T("have no File map object./n")); De_logger->tmWrite("have no File map object"); De_logger->tmException("openMapfile() Get ImageFilename Failed"); return FALSE; } mhFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,//read/write permission. FALSE,//do not inherit name of object mtcImageFilename); if( NULL == mhFile ) { TRACE(_T("OpenFileMapping failed./n")); De_logger->tmException("openMapfile() Open file mapping Failed"); return FALSE; } lpMapAddress = (INT64)MapViewOfFile(mhFile,FILE_MAP_ALL_ACCESS,0,0,0); if( NULL == lpMapAddress ) { TRACE(_T("MapViewOfFile failed./n")); De_logger->tmException("openMapfile() Get view of filemapping Failed"); return FALSE; } De_logger->tmWrite("openMapfile() end"); return TRUE; } BOOL Deliver::receiveFile(LPCTSTR tempFilename) { De_logger->tmWrite("receiveFile() begin"); if( NULL == lpMapAddress) { TRACE(_T("Image file address is null.")); De_logger->tmException("receiveFile() Get MapAddress Failed"); return FALSE; } LPVOID lpBuffer = new BYTE[2048]; DWORD nNumberOfBytesToWrite = 0; //LPDWORD lpNumberOfBytesWritten; //nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress); memcpy(lpBuffer,(LPVOID)lpMapAddress,sizeof(int));//get the header,how long the file should be to read. nNumberOfBytesToWrite = *((LPDWORD) lpMapAddress); //memcpy(&nNumberOfBytesToWrite,lpBuffer,sizeof(int)); TRACE(_T("%ld"),nNumberOfBytesToWrite); memcpy(lpBuffer,(LPVOID)(lpMapAddress + sizeof(int)),nNumberOfBytesToWrite); HANDLE hFileTemp = CreateFile(tempFilename,GENERIC_ALL,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(hFileTemp == INVALID_HANDLE_VALUE) { TRACE(_T("Create temp file failed./n")); De_logger->tmWrite("Create temp file failed."); De_logger->tmException("receiveFile() Create temp file Failed"); return FALSE; } CFile writeFile(hFileTemp); writeFile.Write(lpBuffer,nNumberOfBytesToWrite); CloseHandle(hFileTemp); delete lpBuffer; De_logger->tmWrite("receiveFile() end"); return TRUE; } BOOL Deliver::resultWriteBack(LPCTSTR resultXml) { De_logger->tmWrite("resultWriteBack() begin"); if( _tcslen(resultXml) < 1 ) { TRACE(_T("Result is empty./n")); De_logger->tmException("resultWriteBack() Get result xml Failed"); return FALSE; } int lenAddr = _tcslen(resultXml); memcpy( (LPVOID)lpMapAddress,(LPVOID)(&lenAddr),sizeof(int) ); memcpy( (LPVOID)(lpMapAddress + sizeof(int)),(LPVOID)resultXml,lenAddr ); UnmapViewOfFile((LPVOID)lpMapAddress); if( NULL != mhFile) CloseHandle(mhFile); De_logger->tmWrite("resultWriteBack() end"); return TRUE; }