■■怎么把驱动中截取的信息正确的写入到文件中?
■■如何把驱动中截取的信息正确的写入到文件中??????????
DWORD pcbNeeded=0;
DWORD pcReturned=0;
JOB_INFO_2 * pJobInfo=NULL;
SYSTEMTIME st;
pJobInfo = (JOB_INFO_2 *) LocalAlloc(LPTR, pcbNeeded);
GetJob(pdevobj-> hPrinter,dwJobId,1,(LPBYTE)pJobInfo,pcbNeeded,(LPDWORD)&pcReturned);
HANDLE hDIBFile = NULL;
hDIBFile = CreateFile(TEXT( "c:\\ffdgfaa4aa.xml "), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
BOOL bRet = FALSE;
DWORD NumByteWritten = 0;
char *log= " <Log> <printlog> <job_id> ";
//int iSize;
//char* pszMultiByte;
//
//iSize = WideCharToMultiByte(CP_ACP, 0, pJobInfo-> pDocument, -1, NULL, 0, NULL, NULL);
//pszMultiByte = (char*)malloc((iSize+1)/**sizeof(char)*/);
//WideCharToMultiByte(CP_ACP, 0, pJobInfo-> pDocument, -1, pszMultiByte, iSize, NULL, NULL);
bRet = WriteFile(hDIBFile,log,strlen(log) , &NumByteWritten, NULL);
bRet = WriteFile(hDIBFile,pJobInfo-> pDocument,sizeof(pJobInfo-> pDocument), &NumByteWritten, NULL);
CloseHandle(hDIBFile);
写到文件中的东西是乱码!!!!!!!!!!!!!!!!!!!!
why
???????
------解决方案--------------------
char *log= " <Log> <printlog> <job_id> ";
=============>
TCHAR log[255] = TEXT( " <Log> <printlog> <job_id> ");
------解决方案--------------------
在你的代码中,前面log是ANSI,而后面pDocument是LPTSTR,会根据编译选项而变化,因此在Unicode编译下会造成乱码(如果是ANSI就不会有此问题)。建议全部转换为Unicode,把Log声明成LPCTSTR lpcszLog = _T( ".... ");,然后把pDocument转换成Unicode(在ANSI编译下pDocument应该是ANSI,所以需要转换,而在Unicode下无需转换),可以用ATL的宏T2W来作此转换,可以正确处理Unicode和非Unicode的情况,而不能直接使用MultiByteToWideChar等函数。文件头最好再加上字节顺序编码,如0xFFFE。
当然了,也可以全部转换成ANSI,思路类似。
DWORD pcbNeeded=0;
DWORD pcReturned=0;
JOB_INFO_2 * pJobInfo=NULL;
SYSTEMTIME st;
pJobInfo = (JOB_INFO_2 *) LocalAlloc(LPTR, pcbNeeded);
GetJob(pdevobj-> hPrinter,dwJobId,1,(LPBYTE)pJobInfo,pcbNeeded,(LPDWORD)&pcReturned);
HANDLE hDIBFile = NULL;
hDIBFile = CreateFile(TEXT( "c:\\ffdgfaa4aa.xml "), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
BOOL bRet = FALSE;
DWORD NumByteWritten = 0;
char *log= " <Log> <printlog> <job_id> ";
//int iSize;
//char* pszMultiByte;
//
//iSize = WideCharToMultiByte(CP_ACP, 0, pJobInfo-> pDocument, -1, NULL, 0, NULL, NULL);
//pszMultiByte = (char*)malloc((iSize+1)/**sizeof(char)*/);
//WideCharToMultiByte(CP_ACP, 0, pJobInfo-> pDocument, -1, pszMultiByte, iSize, NULL, NULL);
bRet = WriteFile(hDIBFile,log,strlen(log) , &NumByteWritten, NULL);
bRet = WriteFile(hDIBFile,pJobInfo-> pDocument,sizeof(pJobInfo-> pDocument), &NumByteWritten, NULL);
CloseHandle(hDIBFile);
写到文件中的东西是乱码!!!!!!!!!!!!!!!!!!!!
why
???????
------解决方案--------------------
char *log= " <Log> <printlog> <job_id> ";
=============>
TCHAR log[255] = TEXT( " <Log> <printlog> <job_id> ");
------解决方案--------------------
在你的代码中,前面log是ANSI,而后面pDocument是LPTSTR,会根据编译选项而变化,因此在Unicode编译下会造成乱码(如果是ANSI就不会有此问题)。建议全部转换为Unicode,把Log声明成LPCTSTR lpcszLog = _T( ".... ");,然后把pDocument转换成Unicode(在ANSI编译下pDocument应该是ANSI,所以需要转换,而在Unicode下无需转换),可以用ATL的宏T2W来作此转换,可以正确处理Unicode和非Unicode的情况,而不能直接使用MultiByteToWideChar等函数。文件头最好再加上字节顺序编码,如0xFFFE。
当然了,也可以全部转换成ANSI,思路类似。