// Global.cpp  : Ӧ�ó����ȫ�ֱ���������Դ�ļ�
//
// ���������� 2014��9��25��, 09:55

#include "StdAfx.h"
#include "Global.h"
#include <io.h>	// _access_sͷ�ļ�;
#include <stdio.h> 
 
#include "afxcoll.h"   
#include "afxtempl.h"   
#include "atlconv.h" 
#include "..\\lzari.h"
#include "..\helper\ffsco.h"
#include <WinSock2.h>
#include "..\BasicExcelVC6.h"
using namespace YExcel;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//#include <WS2tcpip.h>
//////////////////////////////////////////////////////////////////////////
static const int BEGIN_YEAR = 1901;
static const int NUMBER_YEAR = 199;
static const unsigned int LUNAR_YEARS[199] =
{
	0x04AE53, 0x0A5748, 0x5526BD, 0x0D2650, 0x0D9544, 0x46AAB9, 0x056A4D, 0x09AD42, 0x24AEB6, 0x04AE4A, //1901-1910
	0x6A4DBE, 0x0A4D52, 0x0D2546, 0x5D52BA, 0x0B544E, 0x0D6A43, 0x296D37, 0x095B4B, 0x749BC1, 0x049754, //1911-1920
	0x0A4B48, 0x5B25BC, 0x06A550, 0x06D445, 0x4ADAB8, 0x02B64D, 0x095742, 0x2497B7, 0x04974A, 0x664B3E, //1921-1930
	0x0D4A51, 0x0EA546, 0x56D4BA, 0x05AD4E, 0x02B644, 0x393738, 0x092E4B, 0x7C96BF, 0x0C9553, 0x0D4A48, //1931-1940
	0x6DA53B, 0x0B554F, 0x056A45, 0x4AADB9, 0x025D4D, 0x092D42, 0x2C95B6, 0x0A954A, 0x7B4ABD, 0x06CA51, //1941-1950
	0x0B5546, 0x555ABB, 0x04DA4E, 0x0A5B43, 0x352BB8, 0x052B4C, 0x8A953F, 0x0E9552, 0x06AA48, 0x7AD53C, //1951-1960
	0x0AB54F, 0x04B645, 0x4A5739, 0x0A574D, 0x052642, 0x3E9335, 0x0D9549, 0x75AABE, 0x056A51, 0x096D46, //1961-1970
	0x54AEBB, 0x04AD4F, 0x0A4D43, 0x4D26B7, 0x0D254B, 0x8D52BF, 0x0B5452, 0x0B6A47, 0x696D3C, 0x095B50, //1971-1980
	0x049B45, 0x4A4BB9, 0x0A4B4D, 0xAB25C2, 0x06A554, 0x06D449, 0x6ADA3D, 0x0AB651, 0x093746, 0x5497BB, //1981-1990
	0x04974F, 0x064B44, 0x36A537, 0x0EA54A, 0x86B2BF, 0x05AC53, 0x0AB647, 0x5936BC, 0x092E50, 0x0C9645, //1991-2000
	0x4D4AB8, 0x0D4A4C, 0x0DA541, 0x25AAB6, 0x056A49, 0x7AADBD, 0x025D52, 0x092D47, 0x5C95BA, 0x0A954E, //2001-2010
	0x0B4A43, 0x4B5537, 0x0AD54A, 0x955ABF, 0x04BA53, 0x0A5B48, 0x652BBC, 0x052B50, 0x0A9345, 0x474AB9, //2011-2020
	0x06AA4C, 0x0AD541, 0x24DAB6, 0x04B64A, 0x69573D, 0x0A4E51, 0x0D2646, 0x5E933A, 0x0D534D, 0x05AA43, //2021-2030
	0x36B537, 0x096D4B, 0xB4AEBF, 0x04AD53, 0x0A4D48, 0x6D25BC, 0x0D254F, 0x0D5244, 0x5DAA38, 0x0B5A4C, //2031-2040
	0x056D41, 0x24ADB6, 0x049B4A, 0x7A4BBE, 0x0A4B51, 0x0AA546, 0x5B52BA, 0x06D24E, 0x0ADA42, 0x355B37, //2041-2050
	0x09374B, 0x8497C1, 0x049753, 0x064B48, 0x66A53C, 0x0EA54F, 0x06B244, 0x4AB638, 0x0AAE4C, 0x092E42, //2051-2060
	0x3C9735, 0x0C9649, 0x7D4ABD, 0x0D4A51, 0x0DA545, 0x55AABA, 0x056A4E, 0x0A6D43, 0x452EB7, 0x052D4B, //2061-2070
	0x8A95BF, 0x0A9553, 0x0B4A47, 0x6B553B, 0x0AD54F, 0x055A45, 0x4A5D38, 0x0A5B4C, 0x052B42, 0x3A93B6, //2071-2080
	0x069349, 0x7729BD, 0x06AA51, 0x0AD546, 0x54DABA, 0x04B64E, 0x0A5743, 0x452738, 0x0D264A, 0x8E933E, //2081-2090
	0x0D5252, 0x0DAA47, 0x66B53B, 0x056D4F, 0x04AE45, 0x4A4EB9, 0x0A4D4C, 0x0D1541, 0x2D92B5 //2091-2099
};
//////////////////////////////////////////////////////////////////////////

// ���ѡƬ [4/1/2015 lyfz]
//////////////////////////////////////////////////////////////////////////

BOOL g_bRemote = FALSE; 

//////////////////////////////////////////////////////////////////////////

HMODULE g_hlyfzMicroShareDLL = NULL;
lyfzCreateShare g_lyfzCreateShare = NULL;


// �������汾��;
WORD g_arrFileVersion[4] = { 0 };

TCHAR g_szLoginUser[MAX_PATH] = _T("");				// ��ǰ�����ĵ�½�û���;
TCHAR g_szLoginPsw[MAX_PATH] = _T("");				// ��ǰ�����ĵ�½����;

TCHAR g_szModulePath[MAX_PATH] = _T("");			// ����Ŀ¼;
TCHAR g_szModuleFileName[MAX_PATH] = _T("");		// ����ȫ����;
TCHAR g_szConnectString[MAX_PATH] = _T("");			// DB���Ӵ�;

// ������Ϣ;
TCHAR g_szHostComputerIP[MAX_PATH] = _T("");			// �������������;
DWORD g_dwCSPort = 5678;								// ���������ͨ��TCP�˿�;

TCHAR g_szN8ViewUserDir[MAX_PATH] = {0};		// N8ѡ��������û�Ŀ¼(����Ŀ¼);
TCHAR g_szN8ViewStsDir[MAX_PATH] = {0};			// N8ѡ�������ͳ������Ŀ¼(����Ŀ¼);
TCHAR g_szN8ViewProductDir[MAX_PATH] = {0};		// N8ѡ���Ʒ����Ŀ¼(����Ŀ¼);
DWORD g_dwSoftRunTime = 0;						// ����ʣ�������ʱ��;

// ���ݿ���Ϣ;
TCHAR g_szDBSource[MAX_PATH] = _T("");		// ���ݿ�Դ(��������IP��������);
TCHAR g_szDBSourcePort[MAX_PATH] = _T("");	// ���ݿ�Դ�˿�;
DWORD g_dwDBServerPort = 0;					// ���ݿ�Դ�˿�;
TCHAR g_szDBAccount[MAX_PATH] = _T("");		// ���ݿ��¼�û�;
TCHAR g_szDBPassWord[MAX_PATH] = _T("");	// ���ݿ��¼����;
TCHAR g_szDBName[MAX_PATH] = _T("");		// ���ݿ�����;	

// ��Ƭ�洢Ŀ¼;
TCHAR g_szShareHost[MAX_PATH] = _T("");					// ����������;
TCHAR g_szOriginalFolder[MAX_PATH] = _T("");			// ԭƬĿ¼;
TCHAR g_szOriginalBkFolder[MAX_PATH] = _T("");			// ԭƬ����Ŀ¼;
TCHAR g_szEarlyRepairFolder[MAX_PATH] = _T("");			// ����ƬĿ¼;
TCHAR g_szEarlyRepairBkFolder[MAX_PATH] = _T("");		// ����Ƭ����Ŀ¼;
TCHAR g_szFurtherRepairFolder[MAX_PATH] = _T("");		// ����ƬĿ¼;
TCHAR g_szFurtherRepairBkFolder[MAX_PATH] = _T("");		// ����Ƭ����Ŀ¼;
TCHAR g_szDesignFolder[MAX_PATH] = _T("");				// ���ƬĿ¼;
TCHAR g_szDesignBkFolder[MAX_PATH] = _T("");			// ���Ƭ����Ŀ¼;
TCHAR g_szTelRecordingFolder[MAX_PATH] = _T("");		// �绰¼��Ŀ¼;
TCHAR g_szFullDressImageFolder[MAX_PATH] = _T("");		// ���ͼƬĿ¼;

TCHAR			g_strCPUID[MAX_PATH] = _T("");						//��ȡCPU ID
TCHAR			g_strMacAddr[MAX_PATH] = _T("");					//mac��ַ
TCHAR			g_strHDNum[MAX_PATH] = _T("");						//Ӳ��ID
TCHAR			g_strBIOSNum[MAX_PATH] = _T("");					//����ID
BOOL			g_bRunOnCorruptdb = FALSE;							// ���𻵵����ݿ�������;

// �������ü��ܹ��Ƿ���ע��;	// Jeff,Ӧ�÷���SoftKey��Ϊ��̬����ʹ��;
BOOL g_bSoftWareReg = FALSE;

// ���ܹ��е��ַ���ϢS1:�� 201409062003558789.ly.com
// ��ȫ�ֱ����ھ����������ǣ�g_sdomain;
// �ñ��������ݿ���ֶ�[path].[path1]�д洢;
CString g_strDogMainInfo = "";

// δ֪��;;
// ��ȫ�ֱ����ھ������������ǣ�CString g_bMain;
// �뼯�Ű��й�����;
// �������������;
CString g_strMain = "";

// �ֵ���������;�����������ƣ�g_branchnamearray
CStringArray g_strArrayOfBranchName;

// ??
CStringArray g_strArrayOfBranchName2;

// �ֵ�IP��ַ����;
CStringArray g_strArrayOfBranchIPAdress;

// �ֵ�ļ��ܹ�S1��Ϣ����;
CStringArray g_strArrayOfBranchDogMainInfo;

// ��ϯ������������(�Ӽ��ܹ��л�ȡ);
unsigned int g_nCountOfAllowToConn = 0;

#ifdef USE_KERNEL_DLL
// ����������Ϣ;���ڼ��Ű�����ʱ,�طñ�����Ϣʱ��; 
TblVersion g_ThisShopVersion;	
HINSTANCE g_Instance = NULL;
#endif

DWORD g_nLeng = 0;
BYTE *g_pData = NULL;
DWORD g_nLeng2 = 0;
BYTE *g_pData2 = NULL;

SENDHEAD g_sendhead;

BOOL g_bRedSkin = 0;
COLORREF g_gridcol1 = RGB(204, 204, 204);
COLORREF g_gridcol2 = RGB(190, 190, 190);
COLORREF g_bkcol = RGB(184, 184, 184);

CString g_date;
CString g_title;
CArray<CStringArray, CStringArray>g_userarray;
CArray<CStringArray, CStringArray>g_cominfoarray;
CArray<CStringArray, CStringArray>g_cominfoarraylocal;
CArray<DWORD, DWORD>g_lengarray;
CArray<DWORD, DWORD>g_btnlengarray;
CArray<BYTE*, BYTE*>g_pointerarray;
CBrush g_editbkbrush;
DWORD g_btnleng[8];
int   g_btnlengpos = -1;
int  g_nYearpos = -1;
CString g_branchname = "";	// Jeff.���Ű�:????���ֵ�����;
CString g_branchip = "";
CString g_branchip2 = "";
BOOL g_bBranchModify = 0;


BOOL g_bShowOK = 0;	// ȡ��OK�Ķ���;
BOOL g_bStaffAchievementShow = 0;	// �˻�����Ա��ҵ���鿴;
BOOL g_bSaveUploadTask1 = 0;
BOOL g_bSaveUploadTask2 = 0;
BOOL g_bSaveUploadTask3 = 0;
BOOL g_bSaveUploadTask4 = 0;
BOOL g_bSearchFilter = 0;
CString g_waiter1;
CString g_waiter2;
CString g_waiter3;
CString g_waiter4;
CString g_waiter5;
CString g_filterdate1;
CString g_filterdate2;
CString g_filterdate3;
CString g_filterdate4;
CString g_filterdate5;
CString g_filterdate6;
CString g_filterbranch;
USER g_user;
CString g_mainpath;				// ����Ŀ¼
CString g_id;					//
CString g_server;				// ����˵�ַ
CStringArray g_serverarray;		// 
CString g_serverbak;			// 
CString g_path1;				/* ����Ŀ¼ <�ͻ�ԭƬ(��������)$>			��:"\\lyfz-pc\�ͻ�ԭƬ(��������)$" */
CString g_path2;				/* ����Ŀ¼ <�޺õ�Ƭ(��������)$>			��:"\\lyfz-pc\�޺õ�Ƭ(��������)$" */
CString g_path3;				/* ����Ŀ¼ <��ƺõ�Ƭ(��������$)>			��:""> */
CString g_path4;				/* ����Ŀ¼ <���޺õ�Ƭ(��������$)>			��:""> */
CString g_path5;				/* ����Ŀ¼ <���ͼƬ(��������$)>			��:""> */
CString g_path6;				/* ����Ŀ¼ <�绰¼��(��������$)>			��:""> */
CString g_path7;				/* ����Ŀ¼ <�ͻ�ԭƬ(��������$)\Ч��ͼ>	��:""> */
CString g_path1bak;
CString g_path2bak;
CString g_path3bak;
CString g_path4bak;
CString g_path5bak;
CString g_path6bak;
CString g_path7bak;

CDatabase g_db;
DWORD g_ncount;
CFont g_titlefont;
DWORD g_nSendCode = 0;
BOOL g_bSendOK = 0;
CString g_temp;

CArray<CStringArray, CStringArray>g_hisyeararray;
CArray<CStringArray, CStringArray>g_brancharray;
CArray<CStringArray, CStringArray>g_oldclientarray;

BOOL g_bNoConnDlg = 0;

BOOL g_bInSkin = 0;
BOOL g_bGenBranchData = 0;

BOOL g_bSortAscending = FALSE;
CFont g_listctrlfont;
float g_fscalex;			// x����̶�
float g_fscaley;			// y����̶�
int g_screenwid;			// �����
int g_screenhei;			// �����

float g_WidthScale2 = 1;
float g_HeightScale2 = 1;

RESDATA2 g_resdata2;
BOOL g_bAlphaWnd = 0;
BYTE g_bNeedDrawParent = 0;
BOOL g_bAllBranch = 0;
CString g_domain;
CString g_sInfo;
int g_ncot = 0;	// Jeff:��������(������ʷ��������),�ñ��������ǵ�������������1000ʱ,��˾��������������;
int g_conpos = 0;

int g_nAutoShowStaffAchievement = -1;
BOOL g_bShowBar = 1;
int g_bookingtype = 0;
BOOL g_bNoLoginLia = 0;
BOOL g_bConnLYFZ = 0;
BOOL g_bSendLYFZ = 0;
int g_ntimeout = 29000;
float g_WidthScale;
float g_HeightScale;
int g_dx = 0;
int g_dy = 0;
BOOL g_bNeedCoon = 1;		// remark by Jeff:�Ƿ���Ҫ�������ӷ����;
CStringArray g_menubranchname;
CArray<CStringArray, CStringArray>g_List1array;

#if USE_SHARE_FLORD
CArray<CStringArray, CStringArray> g_aryOfSharePathInfo;		// NetShareInfo����¼;
#endif
/************************************************************************/
/*
Jeff��g_conntype
g_conntype == 0 :��ʾ��������?(�������ӱ��ط�����?)
g_conntype == 1 :��ʾ���ӹ�˾������(http://lijiafz.vicp.net)
g_conntype == 2 :http://www.lyfz.net/download/ip.txt
g_conntype == 3 :http://photo.bjlyfz.com/download/ip.txt
g_conntype == 4 :
*/
/************************************************************************/

int g_conntype = 0; // ����;
// ʹ��ϵͳ��������;
BOOL g_bOriginal = FALSE;
// �ͻ���guidֵ;
TCHAR g_szGuidMark[64] = {0};
// ����̨���;
BOOL g_bStdOut = FALSE;
// N8��װ·��;
TCHAR g_szN8Path[MAX_PATH] = _T("");
// HostInfo.ini��·��;
TCHAR g_szIniPath[MAX_PATH] = _T("");
// N8ѡ�������IP��ַ;
TCHAR g_szN8SvIP[MAX_PATH] = _T("");
// �Ƿ�������ѡ����;
BOOL g_bEnableClound = FALSE;
// �Ƿ񵼳�������λͼ;
BOOL g_bExportBarCode = FALSE;
// �������������;
INT g_nDrawerCount = 12;

//0 ����
//1 ����1
//2 ����2
//3 ����3
//4 ����4

//************************************//
// ���ݿ��ַ;
// ���ݿ�˿�;
// ���ݿ����Ա�˺�;
// ���ݿ����Ա����;
// ���ݿ�����;
//
// [����]��GetIniInfo
// [����]����ȡָ��ini��Ϣ;
// [����]��
//		szPath��ini����Ŀ¼;
//		szIniName��ini��;
// [����]��void
//************************************//
int GetSysIniInfo(const char *szPath, const char *szIniName)
{
	TCHAR szDrive[_MAX_DRIVE] = { 0 };
	TCHAR szDir[_MAX_DIR] = { 0 };
	TCHAR szFna[_MAX_DIR] = { 0 };
	TCHAR szExt[_MAX_DIR] = { 0 };
	::GetModuleFileName(NULL, g_szModuleFileName, sizeof(g_szModuleFileName) / sizeof(TCHAR));
#ifdef VC60
	sprintf(g_szModulePath, _T("%s"), g_szModuleFileName);
	_tsplitpath(g_szModulePath, szDrive, szDir, szFna, szExt);
	_tcscpy(g_szModulePath, szDrive);
	_tcscat(g_szModulePath, szDir);
#else
	_stprintf_s(g_szModulePath, MAX_PATH, _T("%s"), g_szModuleFileName);
	_tsplitpath_s(g_szModulePath, szDrive, _MAX_DRIVE, szDir, _MAX_DIR, szFna, _MAX_DIR, szExt, _MAX_DIR);
	_tcscpy_s(g_szModulePath, MAX_PATH, szDrive);
	_tcscat_s(g_szModulePath, MAX_PATH, szDir);
#endif

	// -----------------------------------------------------//
	if (szPath != NULL && szIniName != NULL)
	{
		if ( szPath[strlen(szPath) -1] == '\\' )
			wsprintf(g_szIniPath, _T("%s%s"), szPath, szIniName);
		else
			wsprintf(g_szIniPath, _T("%s\\%s"), szPath, szIniName);

		if ( !PathFileExists(g_szIniPath) )
		{
			wsprintf(g_szIniPath, _T("%sHostInfo.ini"), g_szModulePath);
		}
	}
	else
	{
		wsprintf(g_szIniPath, _T("%sHostInfo.ini"), g_szModulePath);
	}

	printf("szFile =%s\n", g_szIniPath);

	HANDLE hFile = CreateFile(g_szIniPath, 0/*GENERIC_READ*/, 0, NULL, OPEN_EXISTING, 0, NULL);

	if (ERROR_FILE_NOT_FOUND == GetLastError())
	{
		printf("û���ҵ������ļ�[%s]\n", g_szIniPath);

		// �������򴴽�;
		CFile fp;
		if( fp.Open(g_szIniPath,CFile::modeCreate|CFile::modeWrite) )
		{
			fp.Close();
		}

		WritePrivateProfileString(_T("NetWorkInfo"),_T("Host"),_T("127.0.0.1"),g_szIniPath);
		WritePrivateProfileString(_T("NetWorkInfo"),_T("CSPort"),_T("5678"),g_szIniPath);
		return -1;
	}

	CloseHandle(hFile);
	hFile = NULL;

	// ��ȡ��������TCP��Ϣ;
	GetPrivateProfileString(_T("NetWorkInfo"), _T("Host"), _T(""), g_szHostComputerIP, MAX_PATH, g_szIniPath);
	// N8ѡ�����·��;
	GetPrivateProfileString(_T("NemoInfo"), _T("N8Path"), _T(""), g_szN8Path, MAX_PATH, g_szIniPath);
	// N8ѡ�������IP;
	//GetPrivateProfileString(_T("NemoInfo"), _T("N8SvIP"), _T(""), g_szN8SvIP, MAX_PATH, g_szIniPath);
	g_dwCSPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("CSPort"), 0, g_szIniPath);
	g_ntimeout = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TimeOut"), 30000, g_szIniPath);
	g_bRunOnCorruptdb = GetPrivateProfileInt(_T("SystemInfo"), _T("RunOnCorruptdb"), 0, g_szIniPath);
	if ( !g_bStdOut )
	{
		g_bStdOut = GetPrivateProfileInt(_T("NetWorkInfo"), _T("StdOut"), 0, g_szIniPath);
		if ( g_bStdOut )
		{
			AllocConsole();                             // ���ٿ���̨;
			SetConsoleTitle(_T("lyfz�������"));		// ���ÿ���̨���ڱ���;
			freopen("CONOUT$", "w+t", stdout);			// �ض������;
			freopen("CONIN$", "r+t", stdin);			// �ض�������;

			HWND hWnd = NULL;
again:
			hWnd = ::FindWindow(NULL, _T("lyfz�������"));
			if( hWnd )
			{
				if (!::SetWindowPos(hWnd, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE)) 
				{
					printf(_T("ǰ������ʧ��\n"));
				}
				else
				{
					printf(_T("ǰ�����óɹ�\n"));
				}
			}
			else
			{
				goto again;
			}
		}
	}
	return 0;
}

//----------------------------------------------------------
// ������IsFileExist
// �������ж�ij�ļ��Ƿ����;
// ������
//		pFileFullName��	ָ�����ļ���;
// ���أ�TRUE��ʾ�ļ�����;
//----------------------------------------------------------
BOOL IsFileExist(const TCHAR *pFileFullName)
{
	int err = 0;

	// Check for existence. 
	if ((err = _access(pFileFullName, 0)) == 0)
	{
		//printf_s( "File crt_access_s.c exists.\n" );

		// Check for write permission. 
		if ((err = _access(pFileFullName, 2)) == 0)
		{
			//printf_s( "File crt_access_s.c does have ""write permission.\n" );
		}
		else
		{
			//printf_s( "File crt_access_s.c does not have ""write permission.\n" );
		}
	}
	else
	{
		//printf_s( "File crt_access_s.c does not exist.\n" );
		return FALSE;
	}

	return TRUE;
}

// Pump messages while waiting for event
//----------------------------------------------------------
// ������WaitWithMessageLoop
// �������ȴ�ij�ں��¼�����;
// ������
//		hEvent��	���ȴ���Ӧ���ں��¼�����;
//		nTimeout��	��ʱֵ;
// ���أ�TRUE���ش����ɹ�;
//----------------------------------------------------------
BOOL WaitWithMessageLoop(HANDLE hEvent, int nTimeout)
{
	DWORD dwRet = 0;

	while (1)
	{
		// wait for event or message, if it's a message, process it and return to waiting state
		dwRet = MsgWaitForMultipleObjects(1, &hEvent, FALSE, nTimeout, QS_ALLINPUT);
		if (dwRet == WAIT_OBJECT_0)
		{
			TRACE0("WaitWithMessageLoop() event triggered.\n");
			return TRUE;
		}
		else if (dwRet == WAIT_OBJECT_0 + 1)
			{
			// process window messages
			AfxGetApp()->PumpMessage();
			}
		else if (dwRet == WAIT_TIMEOUT)
				{
			// timed out !
			return FALSE;
				}
				else
				{
					// WAIT_ABANDONED_0 ...
					return TRUE;
				}
	}
}

//----------------------------------------------------------
// ������DeleteDirectory
// ������ɾ��ָ��Ŀ¼�µ������ļ�;
// ������strDir��ָ��Ҫɾ�����ļ�Ŀ¼;
// ���أ�;
//----------------------------------------------------------
void DeleteDirectory(CString strDir)
{
	try
	{
		//   ����ɾ���ļ������ļ���   
		CFileFind   ff;
		BOOL   bFound = ff.FindFile(strDir + "\\*", 0);
		while (bFound)
		{
			bFound = ff.FindNextFile();
			if (ff.GetFileName() == "." || ff.GetFileName() == "..")
				continue;
			//   ȥ���ļ�(��)ֻ��������   
			SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL);
			if (ff.IsDirectory())
			{   //   �ݹ�ɾ�����ļ���   
				DeleteDirectory(ff.GetFilePath());
				RemoveDirectory(ff.GetFilePath());
			}
			else
			{
				DeleteFile(ff.GetFilePath());   //  �ݹ� ɾ���ļ�   
			}
		}
		ff.Close();
		//   Ȼ��ɾ�����ļ���   
		RemoveDirectory(strDir);
	}
	catch (...)
	{
		//WriteLogin("�����ں���deldir��");
	}
	//	int SHFileOperation( LPSHFILEOPSTRUCT   lpFileOp   );   
}

// Jeff.ע��ؼ�����;2014.09.11
//----------------------------------------------------------
// ������RegisterOcx
// ������ע��ָ��������ļ�;
// ������ocxfileָ��Ҫע�������ļ���;
// ���أ�TRUE��ʾע��ɹ�;
//----------------------------------------------------------
BOOL RegisterOcx(LPCTSTR ocxfile)
{
	HKEY hKey;
	bool bRet;
	USES_CONVERSION;
	ITypeLib* pTypeLib;
	CString CLSIDStr;
	CLSID clsid;
	LPOLESTR wRes = NULL;
	if (LoadTypeLib(T2OLE(ocxfile), &pTypeLib) == S_OK)
	{
		TLIBATTR tlibAttr, *ptlibAttr;
		ptlibAttr = &tlibAttr;
		pTypeLib->GetLibAttr(&ptlibAttr);
		clsid = ptlibAttr->guid;
		pTypeLib->Release();
	}
	::StringFromCLSID(clsid, &wRes);
	CLSIDStr = OLE2CT(wRes);
	if ((RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID\\" + CLSIDStr, 0, KEY_READ, &hKey) == ERROR_SUCCESS) || (RegOpenKeyEx(HKEY_CLASSES_ROOT, "Wow6432Node\\TypeLib\\" + CLSIDStr, 0, KEY_READ, &hKey) == ERROR_SUCCESS))
	{
		return true;
	}
	else
	{
		HINSTANCE hLib = LoadLibrary(ocxfile);
		if (hLib < (HINSTANCE)HINSTANCE_ERROR)
		{
			MessageBox(0, "Ȩ�޲���,��������OCX�ļ����޷�ע��ؼ���", "���", MB_OK);
			bRet = false;
		}
		else
		{
			FARPROC lpDllEntryPoint;
			lpDllEntryPoint = GetProcAddress(hLib, _T("DllRegisterServer"));
			if (lpDllEntryPoint != NULL)
			{
				if (FAILED((*lpDllEntryPoint)()))
				{
					MessageBox(0, "����ע�ắ����DllRegisterServer��ʧ�ܣ��޷�ע��ؼ���", "���", MB_OK);
					bRet = false;
				}
				else
					bRet = true;
			}
			else
			{
				MessageBox(0, "����ע�ắ����DllRegisterServer��ʧ�ܣ��޷�ע��ؼ���", "���", MB_OK);
				bRet = false;
			}
		}
		FreeLibrary(hLib);
		return bRet;
	}
}

// Jeff.Hacker. WINDOWS NT ���ϵ��ں���Ҫ��Ȩ,���ܶ�ϵͳ���и߼�����;
//----------------------------------------------------------
// ������GetDebugPriv
// �������Գ�����Ȩ;
// ������
// ���أ�TRUE��ʾ������Ȩ�ɹ�;
//----------------------------------------------------------
BOOL GetDebugPriv()
{
	// ���صķ�������ָ��;
	HANDLE	hToken;
	// ���������ص��ƶ���Ȩ���Ƶ���Ϣ;
	LUID	sedebugnameValue;
	// ����Ȩ��Ϣ��ָ��(�ṹ��);
	TOKEN_PRIVILEGES tkp;
	DWORD	dwCurProcId = GetCurrentProcessId();
	// Ҫ�޸ķ���Ȩ�޵Ľ��̾��;
	HANDLE	hCurProc;
	hCurProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwCurProcId);

	if (!::OpenProcessToken(hCurProc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
	{
		ShowSystemErrorInfo(CString("��ȨOpenProcessTokenʧ�ܡ�"), GetLastError());
		return FALSE;
	}

	if (!::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
	{
		ShowSystemErrorInfo(CString("��ȨLookupPrivilegeValueʧ�ܡ�"), GetLastError());
		CloseHandle(hToken);
		return FALSE;
	}

	tkp.PrivilegeCount = 1;
	tkp.Privileges[0].Luid = sedebugnameValue;
	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

	if (!::AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
	{
		ShowSystemErrorInfo(CString("��ȨAdjustTokenPrivilegesʧ�ܡ�"), GetLastError());
		CloseHandle(hToken);
		return FALSE;
	}

	CloseHandle(hCurProc);
	CloseHandle(hToken);
	return TRUE;
}

//----------------------------------------------------------
// ������GetFileVersion
// ��������ȡָ��ģ����ļ��汾��Ϣ
// ������
//		hModule:	ָ����ģ�飨���ΪNULL,��ʾ��ȡ�����ļ��汾��Ϣ��;
//		pBuffer��	���ص��ļ��汾��Ϣ;
// 
// ���أ�TRUE��ʾ��ȡģ���ļ��汾��Ϣ�ɹ�;
//----------------------------------------------------------
bool GetFileVersion(HMODULE hModule, WORD *pBuffer)
{
	TCHAR fname[MAX_PATH];
	VS_FIXEDFILEINFO *pVi;
	DWORD dwHandle;
	std::string str;

	if (::GetModuleFileName(hModule, fname, MAX_PATH))
	{
		int size = GetFileVersionInfoSize(fname, &dwHandle);

		if (size > 0)
		{
			BYTE *buffer = new BYTE[size];
			memset(buffer, 0, size);

			if (GetFileVersionInfo(fname, dwHandle, size, buffer))
			{
				if (VerQueryValue(buffer, _T("\\"), (LPVOID *)&pVi, (PUINT)&size))
				{
					pBuffer[0] = HIWORD(pVi->dwFileVersionMS);
					pBuffer[1] = LOWORD(pVi->dwFileVersionMS);
					pBuffer[2] = HIWORD(pVi->dwFileVersionLS);
					pBuffer[3] = LOWORD(pVi->dwFileVersionLS);

					delete buffer;
					return true;
				}
			}

			delete buffer;
		}
	}

	return false;
}

//----------------------------------------------------------
// GetProductVersion
// ��������ȡָ��ģ����ļ��汾��Ϣ
// ������
//		hModule:	ָ����ģ�飨���ΪNULL,��ʾ��ȡ�����ļ��汾��Ϣ��;
//		pBuffer��	���ص��ļ��汾��Ϣ;
// 
// ���أ�TRUE��ʾ��ȡģ���ļ��汾��Ϣ�ɹ�;
//----------------------------------------------------------
bool GetProductVersion(IN HMODULE hModule, OUT WORD *pBuffer)
{
	TCHAR fname[MAX_PATH] = {0};
	VS_FIXEDFILEINFO *pVi = NULL;
	DWORD dwHandle = 0;
	string str;
	
	if (::GetModuleFileName(hModule, fname, MAX_PATH))
	{
		int size = GetFileVersionInfoSize(fname, &dwHandle);
		
		if (size > 0) 
		{
			BYTE *buffer = new BYTE[size];
			memset(buffer,0,size);
			
			if (GetFileVersionInfo(fname, dwHandle, size, buffer)) 
			{
				if (VerQueryValue(buffer, _T("\\"), (LPVOID *)&pVi, (PUINT)&size)) 
				{
					pBuffer[0] = HIWORD(pVi->dwProductVersionMS);
					pBuffer[1] = LOWORD(pVi->dwProductVersionMS);
					pBuffer[2] = HIWORD(pVi->dwProductVersionLS);
					pBuffer[3] = LOWORD(pVi->dwProductVersionLS);
					
					delete []buffer;
					return true;
				}
			}
			
			delete []buffer;
		}
	}
	return false;
}

//----------------------------------------------------------
// ������CheckInternalIP
// �������ж�IP(�����ֽ���)��ַ�Ƿ�Ϊ������ַ;
// ������ip_addr:����IP������Ϊ�����ֽ���;
// 
// ���أ�TRUE��ʾ����IPΪ����IP; FALSE��ʾ����IP;
//----------------------------------------------------------
BOOL CheckInternalIPV4(const unsigned int &ip_addr)
{
	// ���α���IP�Σ���Ϊ˽�е�ַ�������ڹ�����ʹ�ã�ֻ������IP;
	// A�ࣺ10.0.0.0 ~ 10.255.255.255		= 0A.00.00.00 ~ 0A.FF.FF.FF
	// B�ࣺ172.16.0.0 ~ 172.31.255.255		= AC.10.00.00 ~ AC.1F.FF.FF
	// C�ࣺ192.168.0.0 ~ 192.168.255.255	= C0.A8.00.00 ~ C0.A8.FF.FF
	// D�ࣺ127.0.0.0 ~ 127.255.255.255		= 7F.00.00.00 ! 7F.FF.FF.FF	(���ص�ַ)
#if 0
	//���3���ַ�Ƿ����ڹ���;
	if ((ip_addr >= 0x0A000000 && ip_addr <= 0x0AFFFFFF) ||
		(ip_addr >= 0xAC100000 && ip_addr <= 0xAC1FFFFF) ||
		(ip_addr >= 0xC0A80000 && ip_addr <= 0xC0A8FFFF)
		)
	{
		return FALSE;
	}
	return TRUE;
#endif

#if 0
	//���3���ַ�Ƿ���������;
	// 0xa -- "10.0.0.0">>24; 
	// 0xc0a8--"192.168.0.0.">>16; 
	// 0x2b0--"127.17.0.1">>22
	if ((ip_addr >> 24 == 0xa) || (ip_addr >> 16 == 0xc0a8) || (ip_addr >> 22 == 0x2b0))
		return FALSE;
	else
		return TRUE;
#endif

#if 1
	// �ػ���ַҲ���ȥ��
	if ((ip_addr >> 24 == 0x0A) || (ip_addr >> 20 == 0xAC1) || (ip_addr >> 16 == 0xC0A8) || (ip_addr >> 26 == 0x7))
		return FALSE;
	else
		return TRUE;
#endif

}

//----------------------------------------------------------
// ������IsValidIPV4
// �������ж��ַ����Ƿ�����Ч��IPV4;
// ������szIP:����IP;
// 
// ���أ�TRUE��ʾ�ַ���Ϊ��Ч��IPV4;
//----------------------------------------------------------
BOOL IsValidIPV4(const TCHAR *szIP)
{
	int nIndex = 0;
	int nPointCount = 0;	// "."IPV4��3��;
	int nLen = strlen(szIP);
	for (int i = 0; i < nLen; i++)
	{
		if (szIP[i] == '.')
		{
			if (i == 0 || i == nLen - 1)
			{
				return FALSE;
			}
			else
			{
				if (++nIndex != i)
				{
					nIndex = i;
					nPointCount++;
				}
				else
					return FALSE;
			}
			continue;
		}

		if (isdigit(szIP[i]) == 0)
			return FALSE;
	}

	if (nPointCount != 3)
		return FALSE;

	return TRUE;
}

//----------------------------------------------------------
// ������GetHostAllOfIP
// ����������ָ���������Ƶ�����IPV4��ַ;
// ������
//		pHostName:	������;
//		vtHostIPV4��ָ��������������IPV4��ַ;
// 
// ���أ�TRUE��ʾ�ַ���Ϊ��Ч��IPV4;
//----------------------------------------------------------
int GetHostAllOfIP(const TCHAR *pHostName, std::vector<std::string> &vtHostIPV4)
{
#if 0
	WSADATA wsa = { 0 };
	WSAStartup(MAKEWORD(2, 2), &wsa);
#endif

#if 0	// YLGL��Ŀʹ�ò���,��Ϊ�����˾ɵ�ϵͳͷ�ļ�;
	addrinfo hint, *answer, *curr;
	memset(&hint, 0, sizeof(addrinfo));
	hint.ai_family = AF_INET;
	hint.ai_socktype = SOCK_STREAM;

	int nRet = GetAddrInfo(pHostName, NULL, &hint, &answer);
	//int nRet = GetAddrInfo(pHostName, "5678", &hint, &answer);
	if (nRet != 0)
	{
		DWORD dwError = GetLastError();
		return;
	}

	TCHAR szIP[MAX_PATH];
	for (curr = answer; curr != NULL; curr = curr->ai_next)
	{
		//std::string ipstr;
		memset(szIP, 0, MAX_PATH);
		_inet_ntop(AF_INET, &(((sockaddr_in*)(curr->ai_addr))->sin_addr), szIP, MAX_PATH);
		vtHostIPV4.push_back(szIP);
	}

	freeaddrinfo(answer);
#endif

	return 0;
}


void DataToArray(CArray<CStringArray, CStringArray>*pArrayOfString, int datapos)
{
	try
	{
		pArrayOfString->RemoveAll();
		if (g_nLeng == 0)
		{
			return;
		}

		// 1.code[0]���飺��������ʱ,�洢�Ų���ָ��;��������ʱ,�洢�Ž������ݴ�С???;
		if (g_sendhead.code[0])
		{
			// 1.1.��g_pDataȫ�ֱ����ﱣ������ݽ��н�ѹ,���洢��lpszOut������;
			BYTE *lpszOut = NULL;
			int nOutSize = 0;
			LZARI Lzari;
#ifdef VC60
			Lzari.UnCompress(g_pData, g_nLeng, lpszOut, nOutSize);
#else
			Lzari.UnCompress(g_pData, g_nLeng, (const BYTE*&)lpszOut, nOutSize);
#endif

			// 1.2.����ѹ�������lpszOut���ӵ��ڴ��ļ���;
			CMemFile memfile;
			memfile.Attach(lpszOut, nOutSize);
			Lzari.Release();

			// 1.3.���ڴ��ļ����л����浽CArchive������;
			CArchive ar(&memfile, CArchive::load);
			pArrayOfString->SetSize(g_sendhead.count[0]);

			// 1.4.��CArchive�����������,���л���ָ����CArray������;
			for (int ii = 0; ii < pArrayOfString->GetSize(); ii++)
			{
				pArrayOfString->ElementAt(ii).Serialize(ar);
			}

			// 1.5.������ݵĵ�������,�ͷ��ڴ�;
			ar.Close();
			memfile.Detach();
		}
		else
		{
			CMemFile memfile;
			memfile.Attach(g_pData, g_nLeng);
			CArchive ar(&memfile, CArchive::load);
			pArrayOfString->SetSize(g_sendhead.count[0]);
			for (int ii = 0; ii < pArrayOfString->GetSize(); ii++)
			{
				pArrayOfString->ElementAt(ii).Serialize(ar);
			}
			ar.Close();
			memfile.Detach();
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[2] = { pArrayOfString1, pArrayOfString2 };
		DWORD bytereads = 0;
		for (int i = 0; i < 2; i++)
		{
			parray[i]->RemoveAll();
			if (g_sendhead.length[i] == 0)
				continue;
			if (g_sendhead.code[i])
			{
				// 1.1.��g_pDataȫ�ֱ����ﱣ������ݽ��н�ѹ,���洢��lpszOut������;
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif

				// 1.2.����ѹ�������lpszOut���ӵ��ڴ��ļ���;
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();

				// 1.3.���ڴ��ļ����л����浽CArchive������;
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);

				// 1.4.��CArchive�����������,���л���ָ����CArray������;
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}

				// 1.5.������ݵĵ�������,�ͷ��ڴ�;
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[3] = { pArrayOfString1, pArrayOfString2, pArrayOfString3 };
		DWORD bytereads = 0;
		for (int i = 0; i < 3; i++)
		{
			parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[4] =
		{
			pArrayOfString1,
			pArrayOfString2,
			pArrayOfString3,
			pArrayOfString4
		};
		DWORD bytereads = 0;
		for (int i = 0; i < 4; i++)
		{
			parray[i]->RemoveAll(); if (g_sendhead.length[i] == 0)continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	CArray<CStringArray, CStringArray>*pArrayOfString5,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[5] =
		{
			pArrayOfString1,
			pArrayOfString2,
			pArrayOfString3,
			pArrayOfString4,
			pArrayOfString5
		};
		DWORD bytereads = 0;
		for (int i = 0; i < 5; i++)
		{
			parray[i]->RemoveAll();
			if (g_sendhead.length[i] == 0)
				continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads,  g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];

				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	CArray<CStringArray, CStringArray>*pArrayOfString5,
	CArray<CStringArray, CStringArray>*pArrayOfString6,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[6] =
		{
			pArrayOfString1,
			pArrayOfString2,
			pArrayOfString3,
			pArrayOfString4,
			pArrayOfString5,
			pArrayOfString6
		};

		DWORD bytereads = 0;
		for (int i = 0; i < 6; i++)
		{
			parray[i]->RemoveAll();
			if (g_sendhead.length[i] == 0)continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	CArray<CStringArray, CStringArray>*pArrayOfString5,
	CArray<CStringArray, CStringArray>*pArrayOfString6,
	CArray<CStringArray, CStringArray>*pArrayOfString7,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[7] =
		{
			pArrayOfString1,
			pArrayOfString2,
			pArrayOfString3,
			pArrayOfString4,
			pArrayOfString5,
			pArrayOfString6,
			pArrayOfString7
		};
		DWORD bytereads = 0;
		for (int i = 0; i < 7; i++)
		{
			parray[i]->RemoveAll();
			if (g_sendhead.length[i] == 0)continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	CArray<CStringArray, CStringArray>*pArrayOfString5,
	CArray<CStringArray, CStringArray>*pArrayOfString6,
	CArray<CStringArray, CStringArray>*pArrayOfString7,
	CArray<CStringArray, CStringArray>*pArrayOfString8,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[8] =
		{
			pArrayOfString1,
			pArrayOfString2,
			pArrayOfString3,
			pArrayOfString4,
			pArrayOfString5,
			pArrayOfString6,
			pArrayOfString7,
			pArrayOfString8
		};

		DWORD bytereads = 0;
		for (int i = 0; i < 8; i++)
		{
			parray[i]->RemoveAll();
			if (g_sendhead.length[i] == 0)continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	CArray<CStringArray, CStringArray>*pArrayOfString5,
	CArray<CStringArray, CStringArray>*pArrayOfString6,
	CArray<CStringArray, CStringArray>*pArrayOfString7,
	CArray<CStringArray, CStringArray>*pArrayOfString8,
	CArray<CStringArray, CStringArray>*pArrayOfString9,
	CArray<CStringArray, CStringArray>*pArrayOfString10,
	int datapos)
{
	try
	{
		CArray<CStringArray, CStringArray>*parray[10] =
		{
			pArrayOfString1,
			pArrayOfString2,
			pArrayOfString3,
			pArrayOfString4,
			pArrayOfString5,
			pArrayOfString6,
			pArrayOfString7,
			pArrayOfString8,
			pArrayOfString9,
			pArrayOfString10
		};
		DWORD bytereads = 0;
		for (int i = 0; i < 10; i++)
		{
			parray[i]->RemoveAll();
			if (g_sendhead.length[i] == 0)continue;
			if (g_sendhead.code[i])
			{
				BYTE *lpszOut = NULL;
				int nOutSize = 0;
				LZARI Lzari;
#ifdef VC60
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], lpszOut, nOutSize);
#else
				Lzari.UnCompress(g_pData + bytereads, g_sendhead.length[i], (const BYTE*&)lpszOut, nOutSize);
#endif
				CMemFile memfile;
				memfile.Attach(lpszOut, nOutSize);
				Lzari.Release();
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
			else
			{
				CMemFile memfile;
				memfile.Attach(g_pData + bytereads, g_sendhead.length[i]);
				bytereads += g_sendhead.length[i];
				CArchive ar(&memfile, CArchive::load);
				parray[i]->SetSize(g_sendhead.count[i]);
				for (int ii = 0; ii < parray[i]->GetSize(); ii++)
				{
					parray[i]->ElementAt(ii).Serialize(ar);
				}
				ar.Close();
				memfile.Detach();
			}
		}
	}
	catch (...)
	{
	}
}

//////////////////////////////////////////////////////////////////////////
// Image�汾;
BOOL LoadImageFromFile(IN Image** pImg, IN CString strPath)
{
	if ( !PathFileExists(strPath) )
		return FALSE;

	if ( *pImg )
		delete *pImg;

	*pImg  = NULL;

#ifdef UNICODE
	*pImg = Image::FromFile(strPath);
#else
	BSTR strtmp = _bstr_t(strPath);
	*pImg = Image::FromFile(strtmp);
	SysFreeString(strtmp);
#endif

	return TRUE;
}

BOOL LoadImageFromBuf(IN Image** pImg, IN CString strPath)
{
	if ( !PathFileExists(strPath) )
		return FALSE;

	if ( *pImg )
		delete *pImg;
	*pImg  = NULL;

	CFile fp;
	CFileException e;
	BOOL bRet = FALSE;
	if ( fp.Open(strPath, CFile::modeRead, &e))
	{
		DWORD dwLength = (DWORD)fp.GetLength();
		BYTE *pData = new BYTE[dwLength];

		fp.Read(pData,dwLength);
		fp.Close();

		bRet = LoadImageFromBuf(pImg, pData, dwLength);

		if( pData )
			delete []pData;
	}

	return bRet;
}

BOOL LoadImageFromBuf(IN Image** pImg, IN BYTE* pBuffer, IN CONST DWORD& nBufLen)
{
	if ( pBuffer == NULL )
		return FALSE;

	if ( *pImg )
		delete *pImg;

	*pImg  = NULL;
	HGLOBAL hMemery = GlobalAlloc(GMEM_MOVEABLE, nBufLen);
	if ( hMemery == NULL )
		return FALSE;

	BYTE *pMem = (BYTE*)GlobalLock(hMemery);
	memcpy(pMem, pBuffer, nBufLen);

	IStream *pstream = NULL;
	CreateStreamOnHGlobal(hMemery, TRUE, &pstream);
	*pImg = Image::FromStream(pstream);
	GlobalUnlock(hMemery);
	pstream->Release();

	return TRUE;
}

//////////////////////////////////////////////////////////////////////////
// Bitmap�汾;
BOOL LoadImageFromFile(IN Bitmap** pImg, IN CString strPath)
{
	if ( !PathFileExists(strPath) )
		return FALSE;

	if ( *pImg )
		delete *pImg;

	*pImg  = NULL;

#ifdef UNICODE
	*pImg = Image::FromFile(strPath);
#else
	BSTR strtmp = _bstr_t(strPath);
	*pImg = Bitmap::FromFile(strtmp);
	SysFreeString(strtmp);
#endif

	return TRUE;
}

BOOL LoadImageFromBuf(IN Bitmap** pImg, IN CString strPath)
{
	if ( !PathFileExists(strPath) )
		return FALSE;

	if ( *pImg )
		delete *pImg;
	*pImg  = NULL;

		CFile fp;
	CFileException e;
	BOOL bRet = FALSE;
	if ( fp.Open(strPath, CFile::modeRead, &e))
		{
		DWORD dwLength = (DWORD)fp.GetLength();
		BYTE *pData = new BYTE[dwLength];

		fp.Read(pData,dwLength);
			fp.Close();

		bRet = LoadImageFromBuf(pImg, pData, dwLength);

		if( pData )
			delete []pData;
	}

	return bRet;
}

BOOL LoadImageFromBuf(IN Bitmap** pImg, IN BYTE* pBuffer, IN CONST DWORD& nBufLen)
{
	if ( pBuffer == NULL )
		return FALSE;

	if ( *pImg )
		delete *pImg;

	*pImg  = NULL;
	HGLOBAL hMemery = GlobalAlloc(GMEM_MOVEABLE, nBufLen);
	if ( hMemery == NULL )
		return FALSE;

	BYTE *pMem = (BYTE*)GlobalLock(hMemery);
	memcpy(pMem, pBuffer, nBufLen);

	IStream *pstream = NULL;
	CreateStreamOnHGlobal(hMemery, TRUE, &pstream);
	*pImg = Bitmap::FromStream(pstream);
	GlobalUnlock(hMemery);
	pstream->Release();

	return TRUE;
}

//////////////////////////////////////////////////////////////////////////
void LoadImageFromRes(Image **img, LPCTSTR lpszResourceName, LPCTSTR ResourceType)
{
	try
	{
		HGLOBAL  hGlobal = NULL;
		HRSRC  hSource = NULL;
		LPVOID  lpVoid = NULL;
		int   nSize = 0;
		BOOL  bResult = FALSE;
		hSource = FindResource(NULL, lpszResourceName, ResourceType);
		if (hSource == NULL)return;
		hGlobal = LoadResource(NULL, hSource);
		if (hGlobal == NULL)return;
		lpVoid = LockResource(hGlobal);
		if (lpVoid == NULL)return;
		
		nSize = (UINT)SizeofResource(NULL, hSource);
		LoadImageFromBuf(img, (BYTE*)hGlobal, nSize);
		UnlockResource(hGlobal); // 16Bit Windows Needs This
		FreeResource(hGlobal); // 16Bit Windows Needs This (32Bit - Automatic Release)
	}
	catch (...)
	{
	}
}

int GetOrientation(Image *image)
{
	try
	{
		if (image)
		{
			UINT totalBufferSize;
			UINT numProperties;
			image->GetPropertySize(&totalBufferSize, &numProperties);
			// Allocate the buffer that will receive the property items.
			PropertyItem* pAllItems = (PropertyItem*)malloc(totalBufferSize);
			// Fill the buffer.
			image->GetAllPropertyItems(totalBufferSize, numProperties, pAllItems);
			// Print the id data member of each property item.
			for (UINT j = 0; j < numProperties; ++j)
			{
				if (PropertyTagOrientation == pAllItems[j].id)
				{
					short* ptrLong = (short*)(pAllItems[j].value);
					int ret = (int)*ptrLong;
					free(pAllItems);
					return ret;
				}
			}
			free(pAllItems);
		}
	}
	catch (...)
	{
	}
	return 1;
}

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
	UINT  num = 0;          // number of image encoders
	UINT  size = 0;         // size of the image encoder array in bytes

	ImageCodecInfo* pImageCodecInfo = NULL;

	GetImageEncodersSize(&num, &size);
	if (size == 0)
		return -1;  // Failure

	pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
	if (pImageCodecInfo == NULL)
		return -1;  // Failure

	GetImageEncoders(num, size, pImageCodecInfo);

	for (UINT j = 0; j < num; ++j)
	{
		if (wcscmp(pImageCodecInfo[j].MimeType, format) == 0)
		{
			*pClsid = pImageCodecInfo[j].Clsid;
			free(pImageCodecInfo);
			return j;  // Success
		}
	}
	free(pImageCodecInfo);
	return -1;  // FailureFailure
}

void SaveImageToFile(Image *img, CString path)
{
	try
	{
		if (img == NULL)return;
		CLSID   encoderClsid;
		BSTR bstr = path.AllocSysString();
		path.MakeLower();
		if (path.Right(3) == "bmp")
		{
			GetEncoderClsid(L"image/bmp", &encoderClsid);
			img->Save(bstr, &encoderClsid, NULL);
		}
		else if (path.Right(3) == "png")
		{
			GetEncoderClsid(L"image/png", &encoderClsid);
			img->Save(bstr, &encoderClsid, NULL);
		}
		else// if(path.Right (3)=="jpg")
		{
			GetEncoderClsid(L"image/jpeg", &encoderClsid);
			EncoderParameters encoderParameters;
			ULONG             quality;
			encoderParameters.Count = 1;
			encoderParameters.Parameter[0].Guid = EncoderQuality;
			encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
			encoderParameters.Parameter[0].NumberOfValues = 1;
			// Save the image as a JPEG with quality level 100.
			quality = 100;
			encoderParameters.Parameter[0].Value = &quality;
			img->Save(bstr, &encoderClsid, &encoderParameters);
		}
		SysFreeString(bstr);
	}
	catch (...)
	{
	}
}

void SaveImageToFile2(Image *img, CString path, ULONG quality)
{
	try
	{
		if (img == NULL)return;
		CLSID   encoderClsid;
		BSTR bstr = path.AllocSysString();
		path.MakeLower();
		if (path.Right(3) == "bmp")
		{
			GetEncoderClsid(L"image/bmp", &encoderClsid);
			img->Save(bstr, &encoderClsid, NULL);
		}
		else if (path.Right(3) == "png")
		{
			GetEncoderClsid(L"image/png", &encoderClsid);
			img->Save(bstr, &encoderClsid, NULL);
		}
		else// if(path.Right (3)=="jpg")
		{
			GetEncoderClsid(L"image/jpeg", &encoderClsid);
			EncoderParameters encoderParameters;
			encoderParameters.Count = 1;
			encoderParameters.Parameter[0].Guid = EncoderQuality;
			encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
			encoderParameters.Parameter[0].NumberOfValues = 1;
			// Save the image as a JPEG with quality level 100.
			encoderParameters.Parameter[0].Value = &quality;
			img->Save(bstr, &encoderClsid, &encoderParameters);
		}
		SysFreeString(bstr);
	}
	catch (...)
	{
	}
}

/************************************************************************/
/*  ������IsWaiter2[8/10/2016 IT];
/*  ������;
/*  ������;
/*  	[IN] id��������;
/*		[IN] name��ְԱ��;
/*		[IN] waiterarray����������Ϣ;
/*		[IN] bWait1�������Ƿ���Ӱʦ;
/*		[IN] bWait2�������Ƿ�ױʦ/����ʦ1;
/*		[IN] fscale1��������Ӱʦ1���;
/*		[IN] fscale2�����ػ�ױʦ/����ʦ1���;
/*		[IN] bCheckDate���Ƿ�Ҫ���ʱ��;
/*		[IN] date1����ʼʱ��;
/*		[IN] date2������ʱ��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
void IsWaiter2(CString id, CString name, CArray<CStringArray, CStringArray>*waiterarray, BOOL &bWait1, BOOL &bWait2, float &fscale1, float &fscale2, BOOL bCheckDate, CString date1, CString date2)
{
	for (int i = 0; i < waiterarray->GetSize(); i++)
	{
		if (id == waiterarray->ElementAt(i).ElementAt(0))
		{
			if (bCheckDate)
			{
				if (waiterarray->ElementAt(i).ElementAt(21) < date1 || waiterarray->ElementAt(i).ElementAt(21) > date2 || waiterarray->ElementAt(i).ElementAt(22) != "OK")
				//if ( waiterarray->ElementAt(i).ElementAt(21) > date2 || waiterarray->ElementAt(i).ElementAt(22) != "OK")
				{
					bWait1 = bWait2 = 0;
					return;
				}
			}
			if (name == waiterarray->ElementAt(i).ElementAt(1))
			{
				bWait1 = 1;
				fscale1 = atof(waiterarray->ElementAt(i).ElementAt(5)) / 100.0;
				if (fscale1 == 0)fscale1 = 1;
			}
			else if (name == waiterarray->ElementAt(i).ElementAt(2))
			{
				bWait1 = 1;
				fscale1 = atof(waiterarray->ElementAt(i).ElementAt(6)) / 100.0;
			}
			else if (name == waiterarray->ElementAt(i).ElementAt(3))
			{
				bWait1 = 1;
				fscale1 = atof(waiterarray->ElementAt(i).ElementAt(7)) / 100.0;
			}
			else if (name == waiterarray->ElementAt(i).ElementAt(4))
			{
				bWait1 = 1;
				fscale1 = atof(waiterarray->ElementAt(i).ElementAt(8)) / 100.0;
			}
			///////////////////////////////////////////////////////////////////////
			if (name == waiterarray->ElementAt(i).ElementAt(9))
			{
				bWait2 = 1;
				fscale2 = atof(waiterarray->ElementAt(i).ElementAt(13)) / 100.0;
				if (fscale2 == 0)fscale2 = 1;
			}
			else if (name == waiterarray->ElementAt(i).ElementAt(10))
			{
				bWait2 = 1;
				fscale2 = atof(waiterarray->ElementAt(i).ElementAt(14)) / 100.0;
			}
			else if (name == waiterarray->ElementAt(i).ElementAt(11))
			{
				bWait2 = 1;
				fscale2 = atof(waiterarray->ElementAt(i).ElementAt(15)) / 100.0;
			}
			else if (name == waiterarray->ElementAt(i).ElementAt(12))
			{
				bWait2 = 1;
				fscale2 = atof(waiterarray->ElementAt(i).ElementAt(16)) / 100.0;
			}
			return;
		}
	}
	return;
}

void IsWaiter3(CString id, CString name, CArray<CStringArray, CStringArray>*waiterarray, BOOL &bWait1, BOOL &bWait2, float &fscale1, float &fscale2)
{
	bWait1 = bWait2 = 0;
	for (int i = 0; i < waiterarray->GetSize(); i++)
	{
		if (id == waiterarray->ElementAt(i).ElementAt(0))
		{
			if (name == waiterarray->ElementAt(i).ElementAt(17))
			{
				bWait1 = 1;
				fscale1 = atof(waiterarray->ElementAt(i).ElementAt(19)) / 100.0;
				if (fscale1 == 0)fscale1 = 1;
			}
			///////////////////////////////////////////////////////////////////////
			if (name == waiterarray->ElementAt(i).ElementAt(18))
			{
				bWait2 = 1;
				fscale2 = atof(waiterarray->ElementAt(i).ElementAt(20)) / 100.0;
			}
			return;
		}
	}
	return;
}

//------------------------------------------------------------------------------
// Remark by Jeff;
// ������CheckPhoneType
// �������ж��ֻ��������ĸ���Ӫ�̵�;
// ������
//		phoneno:	���жϵ��ֻ���;
//
// ���أ�����0��ʾ�ƶ�; 1��ʾ��ͨ; 2��ʾ����; 3��ʾС��ͨ; -1��ʾδ֪��;
//
// ע�⣺
// �ƶ�:
// 139, 138, 137, 136, 135, 134, 159, 158, 152, 151, 150, 157, 188, 187, 144
// ��ͨ:
// 130, 131, 132, 155, 156, 186, 185
// ���� :
// 133, 153, 189, 180, 181, 173
//------------------------------------------------------------------------------
int CheckPhoneType(CString &phoneno)
{
	if (phoneno.IsEmpty())
		return -1;

	int i = 0;
	for ( i = 0; i < phoneno.GetLength(); i++)
	{
		if (phoneno.GetAt(i) < '0' || phoneno.GetAt(i) > '9')return -1;
	}

	if (phoneno.GetAt(0) == '1')
	{
		if (phoneno.GetLength() != 11)
			return -1;
		int mobile[] = { 139, 138, 137, 136, 135, 134, 159, 158, 152, 151, 150, 157, 188, 187, 144, 182, 147, 183, 184, 178 };
		int unicom[] = { 130, 131, 132, 155, 156, 186, 185, 176 };
		int telecom[] = { 133, 153, 189, 180, 181, 177, 173 };
		int others[] = { 170 };

		for (i = 0; i < sizeof(mobile) / sizeof(int); i++)
		{
			if (mobile[i] == atoi(phoneno.Left(3)))
			{
				return 0;
			}
		}
		for (i = 0; i < sizeof(unicom) / sizeof(int); i++)
		{
			if (unicom[i] == atoi(phoneno.Left(3)))
			{
				return 1;
			}
		}
		for (i = 0; i < sizeof(telecom) / sizeof(int); i++)
		{
			if (telecom[i] == atoi(phoneno.Left(3)))
			{
				return 2;
			}
		}
		for (i = 0; i < sizeof(others)/sizeof(int);i++)
		{
			if ( others[i] == atoi((phoneno.Left(3))))
			{
				return 3;
			}
		}
		return -1;
	}
	return -1;
}

/************************************************************************/
/* 
	����:CheckDateOK
	����:���������;
	����:
		IN:	str Ҫ�жϵ�����;
		IN:	bLunanr �Ƿ���ũ������;
	����:
		����������TRUE;
	Ҫ��:
	ע��:

	�޸�:Jeff
	����:2015-04-28
	����:����������Ч���ж�,ͬʱ֧��ũ������;
*/
/************************************************************************/
BOOL CheckDateOK(IN CString &str, IN CONST BOOL &bLunanr)
{
	if (str.IsEmpty())return 1;
	CString tip;
	int i;
	CString demo = CTime::GetCurrentTime().Format("%Y-%m-%d");
	if (str.GetLength() != demo.GetLength())
		goto ll;
	//2009-01-01
	if (str.GetAt(4) != '-')
		goto ll;
	if (str.GetAt(7) != '-')
		goto ll;
	for (i = 0; i < str.GetLength(); i++)
	{
		if (i == 4 || i == 7)continue;
		if (str.GetAt(i) < '0' || str.GetAt(i) > '9')
			goto ll;
	}

#if 1
	if (!bLunanr)
		return IsValidDate(str);
	else
		return IsValidLunanrDate(str);
#else
	return 1;
#endif
ll:
	tip.Format("����:%s��ʽ����!\r\n����:%s", str, demo);
	AfxMessageBox(tip, MB_ICONSTOP);
	return 0;
}

BOOL CheckBadWords(CString str, BOOL bMsg)
{
	CString badwords[165] = { \
		"��call5.me��", \
		"���ɲ�020", \
		"88btt.com����400611", \
		"400678165", \
		"������", \
		"������", \
		"ʮ�˴�", \
		"���㵺", \
		"���޴������", \
		"�㶫�غ�", \
		"����", \
		"����", \
		"fa lun", \
		"ǿ��", \
		"dafa", \
		"falun", \
		"SIM���齱", \
		"�չ�", \
		"�տ�", \
		"����", \
		"���", \
		"����", \
		"������", \
		"����", \
		"����", \
		"��", \
		"��", \
		"���Ԫ", \
		"��ҩ", \
		"���㵺", \
		"��ͻ", \
		"��ͻ��˹̹��˹���˶�", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"�� �� ��", \
		"��.��.��", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"����", \
		"������", \
		"����", \
		"����", \
		"������", \
		"����", \
		"�Źָ�", \
		"���������ʼ�", \
		"��ׯ", \
		"��־", \
		"��־", \
		"������", \
		"����", \
		"��ë���Ļ�", \
		"��Ů", \
		"�����", \
		"���˵�", \
		"������", \
		"������", \
		"����", \
		"��ͽ", \
		"����", \
		"��������", \
		"��", \
		"��.��", \
		"����", \
		"��-��", \
		"����", \
		"����", \
		"����", \
		"����֮������", \
		"�鶯��", \
		"���ϲ�", \
		"����", \
		"������", \
		"��ɫ�����ֻ�", \
		"����֮��", \
		"����", \
		"��ҩ", \
		"����", \
		"����", \
		"���", \
		"�Ⱥ�", \
		"ǹ֧", \
		"ǿ��", \
		"������", \
		"����", \
		"����Ѷ", \
		"�������ʱ�²ο�", \
		"������������", \
		"������ʵ����", \
		"��Ȩ", \
		"������", \
		"����", \
		"����", \
		"����", \
		"ɫ��", \
		"ɵB", \
		"����", \
		"ʮ����", \
		"ʾ��", \
		"�����", \
		"̨*��", \
		"�صȽ�", \
		"����", \
		"ͻ��˹̹", \
		"�Ʒ�", \
		"���˵�", \
		"�¼ұ�", \
		"����", \
		"����ܲ�", \
		"����", \
		"�»��ٱ�", \
		"�»�����", \
		"���ŷ���", \
		"����", \
		"��`��", \
		"ѹ��", \
		"����", \
		"�������Ϲ�����", \
		"ӡ����˹��������", \
		"����", \
		"����", \
		"�췴", \
		"������", \
		"��ѹ", \
		"����", \
		"����", \
		"���η粨", \
		"�ж��߽���Լ", \
		"�����", \
		"����", \
		"�н�", \
		"���ݻ�", \
		"�Է�", \
		"�����˶�", \
		"����", \
		"����", \
		"�鸾", \
		"����", \
		"���ϵ���", \
		"�ϴ��ֹ�˾", \
		"�ϴ�����", \
		"����", \
		"116114", \
		"��������", \
		"��ʢͶ��", \
		"������", \
		"����", \
		"��Ȼ���", \
		"��ӶBJL�׷�", \
		"ϴ*���Ż�", \
		"�����ֲ���", \
		"18266381922", \
		"�ز���", \
		"�������ͨ�Ƴ����Ŷ���Ʊ��ʵʱ" };

	for (int i = 0; i < 165; i++)
	{
		g_temp = badwords[i];
		if (str.Find(g_temp) != -1)
		{
			//	AfxMessageBox("��Ϣ�����̽�ֹ�ķǷ��ַ�:("+g_temp+")ϣ�����½�!");
			return 0;
		}
	}
	return 1;
}

///Ŀ¼�Ƿ���ڵļ�飺 ֧�������ļ���
bool  CheckFolderFileExist(CString &strPath)
{
	CString path = strPath;
	CFile fp;
	if (fp.Open(path, CFile::modeRead))
	{
		fp.Close();
		return 1;
	}

	if (strPath.Right(1) != "\\")
		path += "\\";
	path += "zaqw1234.dat";
	DeleteFile(path);			// ɾ��zaqw1234.dat�ļ�;

	if (fp.Open(path, CFile::modeCreate) == 0)
		return 0;
	fp.Close();

	if (PathFileExists(path))	// Jeff ɾ���ļ�ǰ�ж��ļ��Ƿ����;
		::DeleteFile(path);		// ɾ��zaqw1234.dat�ļ�;
	return 1;
}

int FindArray(CStringArray *pArray, const CString &Str)
{
	for (int i = 0; i < pArray->GetSize(); i++)
	{
		if (pArray->ElementAt(i) == Str)
			return i;
	}
	return -1;
}

void FillLength(CString &str, int length)
{
	while (str.GetLength() < length)
		str += " ";
}

// ���Ҳ�������ʷ���ݿ��򷵻�-1;
int GetYearPos(int year)
{
	for (int i = 0; i < g_hisyeararray.GetSize(); i++)
	{
		if (year == atoi(g_hisyeararray.ElementAt(i).ElementAt(0)))
			return i;
	}
	return -1;
}

/************************************************************************/
/* 
	������GIsHalfHZ
	�������ж�������ַ������һ���ַ��Ƿ��Ǻ���;
	������
	���أ������һ�������ĺ���,����TRUE�����򷵻�FALSE;
*/
/************************************************************************/
BOOL GIsHalfHZ(const CString &str)
{
#if 0 // ��������ж�,������һ��Ӣ����ĸʱ;
	int   len = str.GetLength();
	BOOL   IsHalf = FALSE;
	for (int i = 0; i < len; i++)
	{
		if (str.GetAt(i) < 0)   IsHalf = !IsHalf;
	}
	return   IsHalf;
#else
#if 1
	INT nLength = str.GetLength();
	BOOL IsHalf = FALSE;

	for ( INT i = 0; i < nLength; )
	{
		if ( str.GetAt(i) < 0 )
		{
			i += 2;
			if ( i > nLength )
				IsHalf = TRUE;
		}
		else
		{
			i++;
		}
	}

	return IsHalf;
#else
	INT nLength = str.GetLength();
	INT wSize = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
	WCHAR *szStr = new WCHAR[wSize];

	INT nnnnn = 0;
	INT nCount = 0;
	INT convresult = MultiByteToWideChar(CP_ACP, 0, str, -1, szStr, wSize);
	for ( INT i = 0; i < wSize; i++ )
	{
		if ( (szStr[i] >= 0x2E80 && szStr[i] <= 0xFE4F) || ( szStr[i] >= 0xFF00 && szStr[i] <= 0xFFEF)  )
			nCount++;
		else
			nnnnn++;
	}

	return !(nCount%2);
#endif
#endif
}

void WriteTitle(CString str)
{
	g_title = str;
	CStdioFile fp;
	fp.Open(g_mainpath + "\\title.txt", CFile::modeWrite | CFile::modeCreate);
	fp.WriteString(str);
	fp.Close();
}

CString GetIP(CString branch)
{
	for (int i = 0; i < g_brancharray.GetSize(); i++)
	{
		if (g_domain == g_brancharray.ElementAt(i).ElementAt(2))
		{
			//if(g_serverbak.Find (".ly.com")!=-1)
			return g_server;
			CString ip = g_serverbak;
			MyGetIPByName(ip);


			return ip;
		}
		if (branch == g_brancharray.ElementAt(i).ElementAt(0))
		{
			return g_brancharray.ElementAt(i).ElementAt(1);
		}
	}
	return "";
}

CString GetBranchIPbyId( IN LPCTSTR lpStrBranchId )
{
	if ( g_domain.CompareNoCase(lpStrBranchId) == 0 )
	{
		return g_server;
	}

	CString strBranchIP = _T("");
	INT nCount = g_brancharray.GetSize();
	for ( int i = 0; i < nCount; i++ )
	{
		if ( g_brancharray.ElementAt(i).ElementAt(2).CompareNoCase(lpStrBranchId) == 0 )
		{
			strBranchIP = g_brancharray.ElementAt(i).ElementAt(1);
			break;
		}
	}

	return strBranchIP;
}

CString GetBranchNamebyId( IN LPCTSTR lpStrBranchId )
{
	if ( g_domain.CompareNoCase(lpStrBranchId) == 0 )
	{
		return _T("");
	}

	CString strBranchName = _T("");
	INT nCount = g_brancharray.GetSize();
	for ( int i = 0; i < nCount; i++ )
	{
		if ( g_brancharray.ElementAt(i).ElementAt(2).CompareNoCase(lpStrBranchId) == 0 )
		{
			strBranchName = g_brancharray.ElementAt(i).ElementAt(0);
			break;
		}
	}

	return strBranchName;
}

BOOL IsHanZi(CString str)
{
	TBYTE ucHigh, ucLow;
	for (int i = 0; i < str.GetLength(); i++)
	{
		if ((TBYTE)str[i] < 0x80)
		{
			continue;
		}
		ucHigh = (TBYTE)str[i];
		ucLow = (TBYTE)str[i + 1];
		if (ucHigh < 0xa1 || ucLow < 0xa1)
		{
			continue;
		}
		return 1;
	}
	return 0;
}

int GetType(CString str)
{
	if (IsHanZi(str))return 0;
	BOOL bDigit = 1;
	BOOL bAlpha = 1;
	for (int i = 0; i < str.GetLength(); i++)
	{
		if (!::isdigit(str.GetAt(i)))
			bDigit = 0;
		if (!((str.GetAt(i) <= 'z' && str.GetAt(i) >= 'a') || (str.GetAt(i) <= 'Z' && str.GetAt(i) >= 'A')))
			//else if(!::isalpha ( ((unsigned char)str.GetAt (i))))
			bAlpha = 0;
		if (bDigit == 0 && bAlpha == 0)return 0;
	}
	if (bDigit)
	{
		return 0;
	}
	else if (bAlpha)
	{
		return 2;
	}
	else
		return 0;
}

CString FilterBZ(CString &bz)
{
	bz.Replace("'", "");
	if (bz.GetLength() > 1023)
	{
		AfxMessageBox("����̫��, �ַ���������ȡ!", MB_ICONSTOP);
		bz = bz.Left(1023);
	}
	return bz;
}

// GetWidth()�ij�����CRect�ij����Dz�һ���ĵ�λֵ,��Ҫת���ʺϵı���;(һ����ͼƬ�����سߴ�,һ��DC�Ĵ�С�ߴ�)
// ��ͼƬ�ߴ����豸�ߴ����ת���ʺϵı���;
void RectFitDes(int width, int height, CRect &rc)
{
	try
	{
		if (width == 0 || height == 0)return;

		// ͼƬ��������;
		float fscale = (float)width / (float)height;

		// �豸��������;
		float rcscale = ((float)rc.Width()) / ((float)rc.Height());

		int rcwid = rc.Width();
		int rchei = rc.Height();
		int dt = 0;

		// Jeff.����豸�������� <  ͼƬ��������;(����ͬ������,��Խ�����ֵԽС,���Դ�ʱͼƬ�ߴ� �� ��ʾ�豸�ijߴ����,Ҫ�Եø���)
		if (rcscale < fscale)
		{
			// Jeff.remarks
			// ������ʾ�豸�Ĵ�С,��ʹ֮������ͼƬ�ߴ�;(������������,Ҫ���ڻ����ͼƬ�ij�������)
			// ���������ַ���ʹ�� rcscale >= fscale ����ʽ������
			// -----------------------------------------------
			// ����1����ʾ�豸����xֵ,������������ʽx��ֵ����
			// (rc.Width()+x) / rc.Height() >= width/height;
			// ����2����ʾ�豸�߼�xֵ,������������ʽx��ֵ����
			// (rc.Width()) / (rc.Height()-x) >= width/height;
			//------------------------------------------------
			// ���ַ�����������ʽΪ��
			// x >= rc.Height() - rcWidth()*(height/width);
			// �� x >= rc.Height() - rcWidth()/fscale;
			//------------------------------------------------
			dt = (rchei - rcwid / fscale) / 2;
			rc.top += dt;
			rc.bottom -= dt;
		}
		else
		{
			dt = (rcwid - rchei*fscale) / 2;
			rc.left += dt;
			rc.right -= dt;
		}
	}
	catch (...)
	{
	}
}

BOOL IsHasRights(int pos) // Jeff,��������;
{
	return 1;
	if (g_user.rights.GetLength() > pos)
	{
		BOOL ret = atoi(g_user.rights.Mid(pos, 1));
		if (ret == 0)AfxMessageBox("û�����Ȩ��!", MB_ICONINFORMATION);
		return ret;
	}
	AfxMessageBox("û�����Ȩ��!", MB_ICONINFORMATION);
	return 0;
}

BOOL IsHasRights2(int pos)// Jeff,��������;
{
	return 1;
	if (g_user.rights.GetLength() > pos)
	{
		BOOL ret = atoi(g_user.rights.Mid(pos, 1));
		return ret;
	}
	return 0;
}

BOOL IsHasRightsnew(int pos)
{
	if (g_user.rights.GetLength() > pos)
	{
		BOOL ret = atoi(g_user.rights.Mid(pos, 1));
		if (ret == 0)
			AfxMessageBox("û�����Ȩ��! ����ϵͳ����Ա��ϵ!", MB_ICONINFORMATION);

		return ret;
	}
	AfxMessageBox("û�����Ȩ��! ����ϵͳ����Ա��ϵ!", MB_ICONINFORMATION);
	return 0;
}

BOOL IsHasRights2new(int pos)
{
	if (g_user.rights.GetLength() > pos)
	{
		BOOL ret = atoi(g_user.rights.Mid(pos, 1));
		return ret;
	}
	return 0;

}

BOOL IsHasRightsnew2(int pos, CString rights)
{
	if (rights.GetLength() > pos)
	{
		BOOL ret = atoi(rights.Mid(pos, 1));
		if (ret == 0)AfxMessageBox("û�����Ȩ��! ����ϵͳ����Ա��ϵ!", MB_ICONINFORMATION);
		return ret;
	}
	AfxMessageBox("û�����Ȩ��! ����ϵͳ����Ա��ϵ!", MB_ICONINFORMATION);
	return 0;
}

/********************************************************************************************
/* Syntax
/*        void FirstLetter(int nCode, CString& strLetter)
/* Remarks:
/*        Get the first letter of pinyin according to specified Chinese character code.
/* Parameters:
/*        nCode         - the code of the chinese character.
/*        strLetter      - a CString object that is to receive the string of the first letter.
/* Return Values:
/*        None.
/* Author:
/*        lixiaosan
/* Create Date:
/*        05-26-2006
/********************************************************************************************/
void FirstLetter(int nCode, CString& strLetter)
{
	if (nCode >= 1601 && nCode < 1637) strLetter = _T("A");
	if (nCode >= 1637 && nCode < 1833) strLetter = _T("B");
	if (nCode >= 1833 && nCode < 2078) strLetter = _T("C");
	if (nCode >= 2078 && nCode < 2274) strLetter = _T("D");
	if (nCode >= 2274 && nCode < 2302) strLetter = _T("E");
	if (nCode >= 2302 && nCode < 2433) strLetter = _T("F");
	if (nCode >= 2433 && nCode < 2594) strLetter = _T("G");
	if (nCode >= 2594 && nCode < 2787) strLetter = _T("H");
	if (nCode >= 2787 && nCode < 3106) strLetter = _T("J");
	if (nCode >= 3106 && nCode < 3212) strLetter = _T("K");
	if (nCode >= 3212 && nCode < 3472) strLetter = _T("L");
	if (nCode >= 3472 && nCode < 3635) strLetter = _T("M");
	if (nCode >= 3635 && nCode < 3722) strLetter = _T("N");
	if (nCode >= 3722 && nCode < 3730) strLetter = _T("O");
	if (nCode >= 3730 && nCode < 3858) strLetter = _T("P");
	if (nCode >= 3858 && nCode < 4027) strLetter = _T("Q");
	if (nCode >= 4027 && nCode < 4086) strLetter = _T("R");
	if (nCode >= 4086 && nCode < 4390) strLetter = _T("S");
	if (nCode >= 4390 && nCode < 4558) strLetter = _T("T");
	if (nCode >= 4558 && nCode < 4684) strLetter = _T("W");
	if (nCode >= 4684 && nCode < 4925) strLetter = _T("X");
	if (nCode >= 4925 && nCode < 5249) strLetter = _T("Y");
	if (nCode >= 5249 && nCode < 5590) strLetter = _T("Z");
}

/********************************************************************************************
/* Syntax
/*        GetFirstLetter(CString strName, CString& strFirstLetter)
/* Remarks:
/*        Get the first letter of pinyin according to specified Chinese character.
/* Parameters:
/*        strName            - a CString object that is to be parsed.
/*        strFirstLetter     - a CString object that is to receive the string of the first letter.
/* Return Values:
/*        None.
/* Author:
/*        lixiaosan
/* Create Date:
/*        05-26-2006
/********************************************************************************************/
void GetFirstLetter(CString strName, CString& strFirstLetter)
{
	TBYTE ucHigh, ucLow;
	int  nCode;
	CString strRet;

	strFirstLetter.Empty();

	for (int i = 0; i < strName.GetLength(); i++)
	{
		if ((TBYTE)strName[i] < 0x80)
		{
			strRet = strName.Mid(i, 1);
			strRet.MakeUpper();
			strFirstLetter += strRet;
			continue;
		}


		ucHigh = (TBYTE)strName[i];
		ucLow = (TBYTE)strName[i + 1];
		if (ucHigh < 0xa1 || ucLow < 0xa1)
			continue;
		else
			nCode = (ucHigh - 0xa0) * 100 + ucLow - 0xa0;

		FirstLetter(nCode, strRet);
		strFirstLetter += strRet;
		i++;
	}
}

CString newGUID()
{
	CString str;
	GUID guid;
	CoInitialize(NULL);
	if (S_OK == ::CoCreateGuid(&guid))
	{
		str.Format(
			"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
			guid.Data1,
			guid.Data2,
			guid.Data3,
			guid.Data4[0], guid.Data4[1],
			guid.Data4[2], guid.Data4[3],
			guid.Data4[4], guid.Data4[5],
			guid.Data4[6], guid.Data4[7]);
	}
	CoUninitialize();
	return str.Left(28);
}

CString GetNameFromDomain(CString domain)
{
	for (int i = 0; i < g_brancharray.GetSize(); i++)
	{
		if (domain == g_brancharray.ElementAt(i).ElementAt(2))
		{
			return g_brancharray.ElementAt(i).ElementAt(0);
		}
	}
	return "";
}

void ConvertToPrice(CString &str)
{
	if (str.Find('.') == -1)return;
	str.TrimRight('0');
	str.TrimRight('.');
}

int GetLengthEx(CString str)
{
	wchar_t   wstr[500];
	int   k = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, strlen(str), wstr, 500);
	return k;
}

inline int MultiByteLengthConvertToWideCharLength(/*LPCSTR*/LPCCH lpString)
{
	return MultiByteToWideChar(CP_ACP, 0, lpString, -1, NULL, 0);
}

//�ж��ַ��Ƿ�������(0 �C 9)
BOOL myisdigit(CString str)
{
	for (int i = 0; i < str.GetLength(); i++)
	{
		if (!::isdigit(str.GetAt(i)))
			return 0;
	}
	return 1;
}

DWORD FindAppProcessID(CString path)
{
	try
	{
		HANDLE handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
		PROCESSENTRY32 Info;
		Info.dwSize = sizeof(PROCESSENTRY32);
		path.MakeLower();
		if (::Process32First(handle, &Info))
		{
			do
			{
				CString ss = Info.szExeFile;
				ss.MakeLower();
				if (ss.Find(path) != -1 || (!ss.CompareNoCase(path)))
				{
					::CloseHandle(handle);
					return Info.th32ProcessID;
				}
			} while (::Process32Next(handle, &Info));
			::CloseHandle(handle);
		}
		return -1;
	}
	catch (...)
	{
	}
}

BOOL isInnerIP(DWORD a_ip) // Jeff.�ж��Ƿ�������?
{
	BOOL bValid = 0;
	if ((a_ip >> 24 == 0xa) || (a_ip >> 16 == 0xc0a8) || (a_ip >> 22 == 0x2b0))
	{
		bValid = 1;
	}
	return bValid;
}

void MyGetIPByName2(CString &name)
{
	CString strIP = name;
	name.Empty();
	DWORD dwServerIP = 0;
	HOSTENT   *host = gethostbyname(strIP);
	struct   in_addr   addr;
	if (host != NULL)
	{
		for (int i = 0; host->h_addr_list[i] != NULL; i++)
		{
			memset(&addr, 0, sizeof(addr));
			memcpy(&addr.S_un.S_addr, host->h_addr_list[i], host->h_length);
			dwServerIP = ntohl(addr.S_un.S_addr);
			BYTE*   pIP = (BYTE*)&dwServerIP;
			name.Format(_T("%d.%d.%d.%d"), pIP[3], pIP[2], pIP[1], pIP[0]);
		}
	}
}

void MyGetIPByName(CString &name) // Jeff.���ݼ�������ƻ�ȡIP��ַ;
{
	g_serverarray.RemoveAll();
	CString strIP = name;
	name.Empty();
	DWORD dwServerIP = 0;
	HOSTENT   *host = gethostbyname(strIP);		// Jeff.�����������������;
	struct   in_addr   addr;
	if (host != NULL)
	{
		// Jeff.��������������������IP��ַ;
		for (int i = 0; host->h_addr_list[i] != NULL; i++)
		{
			memset(&addr, 0, sizeof(addr));
			memcpy(&addr.S_un.S_addr, host->h_addr_list[i], host->h_length);
			dwServerIP = ntohl(addr.S_un.S_addr);
			BYTE*   pIP = (BYTE*)&dwServerIP;
			name.Format(_T("%d.%d.%d.%d"), pIP[3], pIP[2], pIP[1], pIP[0]);
			g_serverarray.Add(name);
		}
	}
	while (g_serverarray.GetSize() > 1)
	{
		CString name;
		BOOL bFind = 0;
		for (int i = 0; i < g_serverarray.GetSize(); i++)
		{
			DWORD dwServerIP = inet_addr(g_serverarray.ElementAt(i));
			dwServerIP = htonl(dwServerIP);//���˲���ȷ
			if (isInnerIP(dwServerIP) == 0)
			{
				g_serverarray.RemoveAt(i);
				bFind = 1;
				break;
			}
		}
		if (bFind == 0)
		{
			break;
		}
	}
}

int IsExistFolder(char *szPath)//���ж��ļ��к��ļ��Ĵ���;
{
	if ((_access(szPath, 0)) != -1)
	{
		if ((_access(szPath, 2)) != -1)
		{
			return 1;
		}
	}
	else
	{
		return -1;
	}
}

CString GetW(CString str)
{
	int x = atoi(str);
	if (x > 9999)
	{
		str.Format("%d", x);
		str = str.Right(5);
		str = str.Left(1);
		return str;
	}
	return "";
}

CString GetK(CString str)
{
	int x = atoi(str);
	if (x > 999)
	{
		str.Format("%d", x);
		str = str.Right(4);
		str = str.Left(1);
		return str;
	}
	return "";
}

CString GetB(CString str)
{
	int x = atoi(str);
	if (x > 99)
	{
		str.Format("%d", x);
		str = str.Right(3);
		str = str.Left(1);
		return str;
	}
	return "";
}

CString GetS(CString str)
{
	int x = atoi(str);
	if (x > 9)
	{
		str.Format("%d", x);
		str = str.Right(2);
		str = str.Left(1);
		return str;
	}
	return "";
}

CString GetG(CString str)
{
	int x = atoi(str);
	if (x > 0)
	{
		str.Format("%d", x);
		str = str.Right(1);
		return str;
	}
	return "";
}

CString GetHMoney(CString str)
{
	if (str.IsEmpty())return "";
	if (str == "0")return "��";
	if (atoi(str) < 1 || atoi(str) > 9)return "";
	CString ret[] = { "Ҽ", "��", "��", "��", "��", "½", "��", "��", "��" };
	return ret[atoi(str) - 1];
}

BOOL CheckDateOK2(CString str)
{
	if (str.IsEmpty())return 0;
	CString tip;
	int i;
	CString demo = CTime::GetCurrentTime().Format("%Y-%m-%d");
	if (str.GetLength() != demo.GetLength())
		goto ll;
	//2009-01-01
	if (str.GetAt(4) != '-')
		goto ll;
	if (str.GetAt(7) != '-')
		goto ll;
	for (i = 0; i < str.GetLength(); i++)
	{
		if (i == 4 || i == 7)continue;
		if (str.GetAt(i) < '0' || str.GetAt(i) > '9')
			goto ll;
	}
	return 1;
ll:
	return 0;
}

CString GetDomainFromBranch(CString branch)
{
	if (branch.IsEmpty())return "";
	for (int i = 0; i < g_brancharray.GetSize(); i++)
	{
		if (branch == g_brancharray.ElementAt(i).ElementAt(0))
		{
			return g_brancharray.ElementAt(i).ElementAt(2);
		}
	}
	return "";
}

CString GetBranchPhotoPath(CString branch)
{
	if (branch.IsEmpty())return "";
	for (int i = 0; i < g_brancharray.GetSize() - 1; i++)
	{
		if (branch == g_brancharray.ElementAt(i).ElementAt(0))
		{
			return "\\" + g_brancharray.ElementAt(i).ElementAt(2);
		}
	}
	return "";
}

CTime GetTmFromStr(CString date)
{
	try
	{
		CTime tm(atoi(date.Mid(0, 4)), atoi(date.Mid(5, 2)), atoi(date.Mid(8, 2)), 0, 0, 0);
		CString ss;
		ss.Format("%d-%d-%d", tm.GetYear(), tm.GetMonth(), tm.GetDay());
		return tm;
	}
	catch (...)
	{
		date = "1980-01-01";
		CTime tm(atoi(date.Mid(0, 4)), atoi(date.Mid(5, 2)), atoi(date.Mid(8, 2)), 0, 0, 0);
		return tm;
	}
}

//---------------------------------------------------------------------
// add by Jeff 2014.10.24
// ������ȫ�ֺ���lyfzCopyFileEx
// �������ļ����ơ�
// ������
//		lpExistingFileName����Ҫ������Դ�ļ���;
//		lpNewFileName��		��Ҫ������Ŀ���ļ���;
//		bFailIfExists��		���Ŀ���Ѿ����ڣ���������True����������������Ŀ�꣨false�� 
// ���أ���CopyFile����һ��;
//---------------------------------------------------------------------
BOOL lyfzCopyFileEx(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, const BOOL &bFailIfExists)
{
	// 1.����Ǹ���ѡ��;
	if (!bFailIfExists)
		return CopyFile(lpExistingFileName, lpNewFileName, bFailIfExists);

	// 2.������Ǹ���ѡ��;
	TCHAR szNewFileName[_MAX_PATH] = { 0 };
	TCHAR szDrive[_MAX_DRIVE] = { 0 };
	TCHAR szDir[_MAX_DIR] = { 0 };
	TCHAR szFna[_MAX_FNAME] = { 0 };
	TCHAR szExt[_MAX_EXT] = { 0 };

	sprintf(szNewFileName, "%s", lpNewFileName);
	_tsplitpath(szNewFileName, szDrive, szDir, szFna, szExt);

	int nIndex = 1;
	while (PathFileExists(szNewFileName))
	{
		sprintf(szNewFileName, "%s%s%s (%d)%s", szDrive, szDir, szFna, nIndex++, szExt);
	}

	return CopyFile(lpExistingFileName, szNewFileName, bFailIfExists);
}

//---------------------------------------------------------------------
// add by Jeff 2014.10.24
// ������ȫ�ֺ���lyfzImportImage,���ֽڰ汾����UNICODE
// ����������ͼƬ��
// ������
//		lpDestDirectory��	�ļ������Ŀ��Ŀ¼;
//		strArrayOfImage��	Ҫ�����ͼƬ�ļ�����;
//		bFailIfExists��		���Ŀ���Ѿ����ڣ���������True����������������Ŀ�꣨false�� 
// ���أ�
//
// ˵��:�ڵ���lyfzImportImageǰ����Ҫ�Դ��ݵIJ���������Ч����֤
//		1.��֤�β�lpDestDirectory��Ӧ��ʵ���Ƿ�����Ч��Ŀ¼�����޴���Ŀ¼�ķǷ��ַ����ڣ�
//		2.��֤�β�strArrayOfImage��Ӧ��ʵ�������Ƿ����0;
// ���У��û��ͨ��,Ӧ�þܾ���lyfzImportImage���Է�ֹ���������
//---------------------------------------------------------------------
void lyfzImportImage(LPCTSTR lpDestDirectory, CStringArray &strArrayOfImage, const BOOL &bFailIfExists)
{
	// ���ݸ�lyfzCreateDirectory�IJ����淶��;
	int nlen = strlen(lpDestDirectory);
	TCHAR szNewFileName[_MAX_PATH] = { 0 };
	TCHAR szTempDirectory[_MAX_PATH] = { 0 };
	if (lpDestDirectory[nlen - 1] != '\\')
		sprintf(szTempDirectory, "%s\\", lpDestDirectory);
	else
		sprintf(szTempDirectory, "%s", lpDestDirectory);

	// ��Ŀ¼����Ŀ¼�����ڴ���;
	lyfzCreateDirectory(szTempDirectory);

	// ��������;
	CString strImage;
	INT_PTR nSize = strArrayOfImage.GetSize();
	for (INT_PTR i = 0; i < nSize; i++)
	{
		strImage = strArrayOfImage.ElementAt(i);
		strImage = strImage.Mid(strImage.ReverseFind('\\') + 1);
		//strImage = strImage.Left(strImage.ReverseFind('.'));
		sprintf(szNewFileName, "%s%s", szTempDirectory, strImage);
		lyfzCopyFileEx(szNewFileName, strArrayOfImage.ElementAt(i), bFailIfExists);
	}
}


//---------------------------------------------------------------------
// add by Jeff 2014.10.25
// ������ȫ�ֺ���lyfzCreateDirectory,���ֽڰ汾����UNICODE
// ����������Ŀ¼����Ŀ¼�ļ���;
// ������
//		lpDestDirectory��Ŀ¼,������"E:\lyfzdb\����\"��ʽ,Ŀ¼��������"\",�������һ����Ŀ¼�޷�������
//		����ʹ��ϵͳ_tsplitpath���ָ�Ŀ¼,�����ᱣ�����һ��"\"б��;
// ���أ��ɹ���������TRUE;
//---------------------------------------------------------------------
BOOL lyfzCreateDirectory(LPCTSTR lpDestDirectory)
{
	BOOL bExists = FALSE;
	TCHAR szNewFileName[_MAX_PATH] = { 0 };
	TCHAR szDrive[_MAX_DRIVE] = { 0 };
	TCHAR szDir[_MAX_DIR] = { 0 };
	TCHAR szFna[_MAX_FNAME] = { 0 };
	TCHAR szExt[_MAX_EXT] = { 0 };

	int nIndex = 0;
	do
	{
		bExists = PathFileExists(lpDestDirectory);
		if (!bExists)
		{
			memset(szDrive, 0, _MAX_DRIVE);
			memset(szDir, 0, _MAX_DIR);
			memset(szFna, 0, _MAX_FNAME);
			memset(szExt, 0, _MAX_EXT);
			lyfzSplitpath(lpDestDirectory, szDrive, szDir, ++nIndex);
			sprintf(szNewFileName, _T("%s%s"), szDrive, szDir);
			CreateDirectory(szNewFileName, NULL);
			//if (FALSE == CreateDirectory(szNewFileName, NULL))
			//{
				//ShowSystemErrorInfo(CString("����Ŀ¼������"), GetLastError());
				//return FALSE;
			//	continue;
			//}
		}
	} while (!bExists);

	return TRUE;
}

//---------------------------------------------------------------------
// add by Jeff 2014.10.24
// ������ȫ�ֺ���tSplitpath,���ֽڰ汾����UNICODE
// ��������ϵͳWindows C++���п⺯��_tsplitpath��
// ������
//		
// ���أ�
//---------------------------------------------------------------------
void lyfzSplitpath(const char *path, char *drive, char *dir, const int &nTimes)
{
	int nlen = strlen(path);

	int i = 0;
	int npoint = 0;	// '.'
	int nsprit = 0; // '\\'
	int ncolon = 0; // ':'
	int ntimes = -1;

	while (nlen > i++)
	{
		if (path[i] == ':')
			ncolon = i;
		else if (path[i] == '\\')
		{
			if (nTimes == ntimes++) break;
			nsprit = i;
		}
	}

	memcpy(drive, path, ncolon + 1);
	memcpy(dir, &path[ncolon + 1], nsprit - ncolon);
}

//---------------------------------------------------------------------
// Jeff add 2014.06.23;
// ������ShowErrorInfo
// ������
// ����:
//     lpszFunction��������;
//     dwError��������; 
// ���أ�
//---------------------------------------------------------------------
void ShowSystemErrorInfo(CString &strDescription, const DWORD &dwError)
{
#if 0
	LPVOID lpMsgBuf;

	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER |
		FORMAT_MESSAGE_FROM_SYSTEM |
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		dwError,
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&lpMsgBuf,
		0, NULL);

	// Display the error message and exit the process
	CString strDisplay;
	strDisplay.Format("ʧ�ܴ�����=%d,Windows�ڲ�����:%s", dwError, lpMsgBuf);
	strDescription += strDisplay;

	AfxMessageBox(strDescription);

	LocalFree(lpMsgBuf);
#endif

	LPVOID lpMsgBuf;

	BOOL fOk = FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER |
		FORMAT_MESSAGE_FROM_SYSTEM |
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		dwError,
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR)&lpMsgBuf,
		0, NULL);

	if (!fOk)
	{
		// Is it a network-related error?
		HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);

		if (hDll != NULL)
		{
			FormatMessage(
				FORMAT_MESSAGE_FROM_HMODULE |
				FORMAT_MESSAGE_FROM_SYSTEM |
				FORMAT_MESSAGE_IGNORE_INSERTS,
				hDll,
				dwError,
				MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
				(LPTSTR)&lpMsgBuf,
				0,
				NULL);

			FreeLibrary(hDll);
		}
	}

	if (lpMsgBuf != NULL)
	{
		CString strDisplay;
		strDisplay.Format("%s.������=%d,Windows����:%s", strDescription, dwError, (LPCTSTR)LocalLock(lpMsgBuf));
		//WriteLogin(strDisplay);
		AfxMessageBox(strDisplay);
		LocalFree(lpMsgBuf);
	}
	else
	{
		//WriteLogin(strDescription);
		AfxMessageBox("δ֪������");
	}
}

/************************************************************************/
/*  ������WriteTextLog[7/28/2016 IT];
/*  ������д�ı���־;
/*  ������;
/*  	[IN] ��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
void WriteTextLog(const TCHAR *format, ...)
{
	try
	{
		// ��������־·��;
		TCHAR szlogpath[MAX_PATH] = {0};
		static TCHAR szModulePath[MAX_PATH] = {0};
		static TCHAR szFna[_MAX_DIR] = { 0 };
		if ( szModulePath[0] == _T('\0') )
		{
			TCHAR szDrive[_MAX_DRIVE] = { 0 };
			TCHAR szDir[_MAX_DIR] = { 0 };
			TCHAR szExt[_MAX_DIR] = { 0 };
			::GetModuleFileName(NULL, szModulePath, sizeof(szModulePath) / sizeof(TCHAR));
			_splitpath(szModulePath, szDrive, szDir, szFna, szExt);
			strcpy(szModulePath, szDrive);
			strcat(szModulePath, szDir);
		}

		sprintf(szlogpath, _T("%s�ͻ�����־.txt"), szModulePath);

		// �򿪻򴴽��ļ�;
		CStdioFile fp;
		if (PathFileExists(szlogpath))
		{
			if ( !fp.Open(szlogpath, CFile::modeWrite) )
			{
				return;
			}
			fp.SeekToEnd();
		}
		else
		{
			if ( !fp.Open(szlogpath, CFile::modeCreate | CFile::modeWrite) )
				return;
		}

		// ��ʽ��ǰ������������;
		TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
		_tsetlocale(LC_CTYPE, _T("chs"));//�趨����;

		// ��ʽ����־����;
		va_list		args = NULL;
		int			len = 0;
		static TCHAR buffer[8192] = {0};
		va_start( args, format );
		/*len = printf( format, args )  + 1;// VC6.0��printf���ڰ�ȫ����������;
		if ( len == 0 )
		{
			TCHAR *pErr = strerror(errno);
			OutputDebugString(pErr);
		}
		buffer = (TCHAR*)malloc( len * sizeof(TCHAR) );
		if ( buffer == NULL )
		{
			_tsetlocale(LC_CTYPE, old_locale);
			free(old_locale);//��ԭ�����趨;
			fp.Close();
			return;
		}*/
		memset(buffer, 0, 8192);
		vsprintf( buffer, format, args ); // C4996
		// Note: vsprintf is deprecated; consider using vsprintf_s instead

		// ����־�������뵽�ļ���;
		fp.WriteString( CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S ")) );
		fp.WriteString(buffer);
		fp.WriteString(_T("\n"));

		// �ر��ļ����ͷ���Դ�����û�ԭ��������;
		//free( buffer );
		_tsetlocale(LC_CTYPE, old_locale);
		free(old_locale);//��ԭ�����趨;
		fp.Close();
	}
	catch (CException *e)
	{
		e->ReportError();
		e->Delete();
	}
}
//---------------------------------------------------------------------
// add by Jeff 2014.10.27
// ������ȫ�ֺ���IsDirectoryLegitimate,���ֽڰ汾����UNICODE
// �������ж�һ��Ŀ¼·���ַ������Ƿ����ںϷ��ġ��ɴ�����Ŀ¼·����
// ������strDirectory ����֤��·���ַ���;
//		
// ���أ��Ϸ�·������TRUE;
//---------------------------------------------------------------------
BOOL IsDirectoryLegitimate(const CString &strDirectory)
{
	if (strDirectory.Find('/') != -1 ||
		strDirectory.Find('\\') != -1 ||
		strDirectory.Find(':') != -1 ||
		strDirectory.Find('*') != -1 ||
		strDirectory.Find('?') != -1 ||
		strDirectory.Find('\"') != -1 ||
		strDirectory.Find('>') != -1 ||
		strDirectory.Find('<') != -1 ||
		strDirectory.Find('|') != -1
		)
		return FALSE;

	return TRUE;
}

//----------------------------------------------------------------------
// remark by Jeff 2014.11.08
// ������ExportCutImageToFile
// �����������ü�ͼƬ��ָ��Ŀ¼;
// ������
//		 lpOrderCutImageInfo:�����ŵIJü���Ƭ��Ϣ;
//		 lpSrcDirectory:ԭͼƬ·��;
//		 lpOrderCutImageInfo��ʽ����Ƭ��|�ü�����|ԭƬ��|ԭƬ��|�ü�left|�ü�top|�ü�bottom|�ü�rigth
// 225:5X7,1440,900,88,0,1352,900;228:5X7,1440,900,88,0,1352,900;224:5X7,1440,900,88,0,1352,900;227:10��,1440,900,56,0,1384,900;229:10��ˮ��,1440,900,570,232,870,671;
//		 lpSaveDirectory:������Ƭ�ı���·��;
// ���أ���
//----------------------------------------------------------------------
void ExportCutImageToFile(LPCCH lpOrderCutImageInfo, LPCCH lpSrcDirectory, LPCCH lpSaveDirectory)
{
	if (FALSE == lyfzCreateDirectory(lpSaveDirectory))
		return;

	CStringArray saSrcPhoto;
	GetCountOfOrderFolderPhotoFile(lpSrcDirectory, saSrcPhoto);

	CString strImageName;		// ��Ƭ��;
	CString strCutScheme;		// �ü�����;
	CRect rtCut;				// Ҫ�ü�������;

	CString strTemp;
	CString strImageInfo(lpOrderCutImageInfo);
	int nIndex = -1;
	do
	{
		// 225:5X7,1440,900,88,0,1352,900;
		nIndex = strImageInfo.Find(';');
		strTemp = strImageInfo.Left(nIndex);
		strImageInfo = strImageInfo.Mid(nIndex + 1);

		int SrcImageWid;
		int SrcImageHei;
		int ntempIndex = -1;
		if (nIndex != -1)
		{
			if (FALSE == AnalysisImagInfo(saSrcPhoto,lpSrcDirectory, lpSaveDirectory, strTemp, strImageName, strCutScheme, rtCut))
				continue;
		}
		else
		{
			if (strImageInfo.IsEmpty())
				break;

			AnalysisImagInfo(saSrcPhoto,lpSrcDirectory, lpSaveDirectory, strImageInfo, strImageName, strCutScheme, rtCut);
			break;
		}

	} while (nIndex != -1);
}

//----------------------------------------------------------------------
// remark by Jeff 2014.11.08
// ������AnalysisImagInfo
// �����������ü�ͼƬ��ָ��Ŀ¼;
// ������
//		 lpOrderCutImageInfo:�����ŵIJü���Ƭ��Ϣ;
//		 lpSrcDirectory:ԭͼƬ·��;
//		 lpOrderCutImageInfo��ʽ����Ƭ��|�ü�����|ԭƬ��|ԭƬ��|�ü�left|�ü�top|�ü�bottom|�ü�rigth
//		 225:5X7,1440,900,88,0,1352,900;
//		 lpSaveDirectory:������Ƭ�ı���·��;
// ���أ���
//
// ˵����δ��ͼƬ������С,ֱ����ԭƬ�ϲü����á�
//----------------------------------------------------------------------
BOOL AnalysisImagInfo(CStringArray &saSrcPhoto, LPCCH lpSrcDirectory, LPCCH lpSaveDirectory, CString &strImageInfo, CString &strImageName, CString &strCutScheme, CRect &rtCut)
{
	int ntempIndex = -1;
	strImageName = strImageInfo.Left(3);		// �ü���Ƭ��;
	strImageInfo.Delete(0, 4);

	CString strSrcImagePath;
	BOOL bExist = FALSE;
	for (int i = 0; i < saSrcPhoto.GetSize(); i++)
	{
		CString strTemp = saSrcPhoto.ElementAt(i);
		strSrcImagePath = strTemp;
		_splitpath((LPCTSTR)saSrcPhoto.ElementAt(i), NULL, NULL, strTemp.GetBuffer(0), NULL);
		strTemp.ReleaseBuffer();

		if ( strTemp == strImageName)
		{
			bExist = TRUE;
			//saSrcPhoto.RemoveAt(i);
			break;
		}
	}

	if (FALSE == bExist)
		return FALSE;

	ntempIndex = strImageInfo.Find(',');
	strCutScheme = strImageInfo.Left(ntempIndex);	// �ü�����;

	strImageInfo.Delete(0, ntempIndex + 1);

	// �ü�ԭͼ��;
	ntempIndex = strImageInfo.Find(',');
	LONG SrcImageWid = _ttol(strImageInfo.Left(ntempIndex));
	strImageInfo.Delete(0, ntempIndex + 1);

	// �ü�ԭͼ��;
	ntempIndex = strImageInfo.Find(',');
	LONG SrcImageHei = _ttol(strImageInfo.Left(ntempIndex));
	strImageInfo.Delete(0, ntempIndex + 1);

	// left����ֵ;
	ntempIndex = strImageInfo.Find(',');
	rtCut.left = _ttol(strImageInfo.Left(ntempIndex));
	strImageInfo.Delete(0, ntempIndex + 1);

	// top����;
	ntempIndex = strImageInfo.Find(',');
	rtCut.top = _ttol(strImageInfo.Left(ntempIndex));
	strImageInfo.Delete(0, ntempIndex + 1);

	// right����;
	ntempIndex = strImageInfo.Find(',');
	rtCut.right = _ttol(strImageInfo.Left(ntempIndex));
	strImageInfo.Delete(0, ntempIndex + 1);

	// bottom����;
	rtCut.bottom = _ttol(strImageInfo.Left(ntempIndex));

	// �����ü���Ƭ��ָ��Ŀ¼;
	// 1.����ԭͼ;
	Image *SrcImage = NULL;
	//if (FALSE == PathFileExists(CString(lpSrcDirectory + strImageName + _T(".jpg"))))
	if (FALSE == PathFileExists(strSrcImagePath))
	{
		AfxMessageBox(_T("��ƬԴ�ļ�������"));
		return FALSE;
	}
	//LoadImageFromBuf(&SrcImage, CString(lpSrcDirectory + strImageName + _T(".jpg")));
	LoadImageFromBuf(&SrcImage, strSrcImagePath);

	if (SrcImage == NULL)
	{
		AfxMessageBox(_T("����ԴͼƬʧ��"));
		return FALSE;
	}
	int orientation = GetOrientation(SrcImage);
	if (orientation == 8)
		SrcImage->RotateFlip(Rotate270FlipNone);
	else if (orientation == 6)
		SrcImage->RotateFlip(Rotate90FlipNone);
	if (SrcImage->GetWidth() == 0)
		return FALSE;

	float scale = 1.0;
	scale *= (float)SrcImage->GetWidth() / (float)SrcImageWid;

	rtCut.left *= scale;
	rtCut.right *= scale;
	rtCut.top *= scale;
	rtCut.bottom *= scale;

#if 0	// ������ԭͼ�ϻ��ü�����;
	Graphics graph(SrcImage);

	Pen blackPen(Color(255, 255, 0, 0), 1);
	graph.DrawRectangle(&blackPen, rtCut.left, rtCut.top, rtCut.Width(), rtCut.Height());
	SaveImageToFile(SrcImage, CString(lpSaveDirectory + strImageName + _T(".jpg")));
	delete SrcImage;
#else	// ֱ�ӱ���ü����ͼƬ;
	Bitmap bp(rtCut.Width(), rtCut.Height());
	Graphics *graphic = Graphics::FromImage(&bp);
	graphic->Clear(Color(255, 255, 255, 255));

	graphic->SetInterpolationMode(InterpolationModeHighQualityBicubic);
	graphic->SetSmoothingMode(SmoothingModeHighQuality);//SmoothingModeHighSpeed
	graphic->SetPixelOffsetMode(PixelOffsetModeHighQuality);
	graphic->SetCompositingMode(CompositingModeSourceOver);
	graphic->SetCompositingQuality(CompositingQualityHighQuality);
	graphic->SetTextRenderingHint(TextRenderingHintAntiAliasGridFit);
	graphic->DrawImage(SrcImage, RectF(0, 0, rtCut.Width(), rtCut.Height()), rtCut.left, rtCut.top, rtCut.Width(), rtCut.Height(), UnitPixel);

	delete SrcImage;
	delete graphic;
	//delete graphic;
	//CString strSave;
	//strSave.Format("%s%s:%s.jpg", lpSaveDirectory,strImageName,strCutScheme);
	//SaveImageToFile(&bp, strSave);
	SaveImageToFile(&bp, CString(lpSaveDirectory + strImageName + _T("��") + strCutScheme + _T(".jpg")));
#endif

	return TRUE;
}

// ��Ƭ��׺��jpg��raw��cr2��NEF ���ֳ��ú�׺
//--------------------------------------------------------------------------------
// Remark by Jeff 2014.11.10
// ������GetCountOfOrderFolderPhotoFile
// ��������ȡ�����ļ�����������Ƭ�ļ�,����"m"��"s"��ͷ��Сͼ;
// ������pOrderFolder:��������;
// ���أ�
//
//--------------------------------------------------------------------------------
int GetCountOfOrderFolderPhotoFile( const TCHAR *pOrderFolder,  CStringArray &StrPhotoArray)
{
	CStringArray StrSubFoloderArray;
	using namespace helper_coffs;
	ffsco o;
	o.dirs(1);	// Jeff.1:������Ŀ¼;
	o.find(LPCTSTR(pOrderFolder), LPCTSTR(_T("*.*")));	// ���ܴ���m��s��ͷ������ͼ,��Ҫ���˵�;

	if (o.count() == 0)
		return 0;

	// ��ȡ��Ŀ¼��;
	ffsco::typeT coo;
	ffsco::typeT::iterator it;
	coo = o.co_dir();
	for (it = coo.begin(); it != coo.end(); it++)
	{
		if (FindArray(&StrSubFoloderArray, (*it).c_str()) == -1)
			StrSubFoloderArray.Add((*it).c_str());
	}

	int nIndex = -1;
	CString strOrderNumberImage;
	// ��ȡ��Ŀ¼�µ��ļ���;
	//CStringArray StrPhotoArray;
	for (int n = 0; n < StrSubFoloderArray.GetSize(); n++)
	{
		ffsco op;
		op.dirs(0);
		op.find(LPCTSTR(StrSubFoloderArray.ElementAt(n)), LPCTSTR(_T("*.jpg")));
		ffsco::typeT coo;
		ffsco::typeT::iterator itp;
		coo = op.co_file();

		for (itp = coo.begin(); itp != coo.end(); itp++)
		{
			strOrderNumberImage = (*itp).c_str();
			nIndex = strOrderNumberImage.ReverseFind('\\');
			strOrderNumberImage = strOrderNumberImage.Right(strOrderNumberImage.GetLength() - nIndex -1);
			if (strOrderNumberImage.Left(1) != _T("m") && strOrderNumberImage.Left(1) != _T("s"))
			{
				StrPhotoArray.Add((*itp).c_str());
			}
		}
	}

	return 0;
}


//---------------------------------------------------------------------
// Jeff add 2015.03.26;
// ������GetFileNameFromFullPath
// ��������ȫ·���л�ȡ�ļ�����
// ����:
//     lpFullPath��ȫ·��;
// ���أ�
//---------------------------------------------------------------------
VOID GetFileNameFromFullPath(CONST CString &strFullPath, CString &strRet)
{
	// ��������ջ����·��������;
	if (strFullPath.IsEmpty() || !PathFileExists(strFullPath)) return;

	INT nIndex = strFullPath.ReverseFind(_T('\\'));
	
}

BOOL LoadMicroShareLibrary()
{
	if (g_hlyfzMicroShareDLL == NULL)
		g_hlyfzMicroShareDLL = LoadLibrary(_T("lyfzMicroShare.dll"));

	if (g_hlyfzMicroShareDLL == NULL)
	{
		AfxMessageBox(_T("����΢����ģ��ʧ�ܣ�"));
		return FALSE;
	}

	g_lyfzCreateShare = (lyfzCreateShare)::GetProcAddress(g_hlyfzMicroShareDLL, "lyfzCreateShare");

	if (!g_lyfzCreateShare)
	{
		FreeLibrary(g_hlyfzMicroShareDLL);
		g_hlyfzMicroShareDLL = NULL;
		AfxMessageBox(_T("���ص��뵼��ģ��ӿ�ʧ�ܣ�"));
		return FALSE;
	}

	return TRUE;
}

void FreeMicroShareLibrary()
{
	if (g_hlyfzMicroShareDLL)
		FreeLibrary(g_hlyfzMicroShareDLL);
	g_hlyfzMicroShareDLL = NULL;
	g_lyfzCreateShare = NULL;
}

BOOL OpenShareDirectory()
{
	// ��ȡremotecfg.dat;
	if (strcmp(g_szModulePath, _T("")) == 0)
		return FALSE;

	TCHAR szdbcfgFile[MAX_PATH] = { _T("") };
	sprintf(szdbcfgFile, _T("%s%s"), g_szModulePath, _T("dbconfig.dat"));

	// û�ҵ��ļ�;
	if (!PathFileExists(szdbcfgFile)) return FALSE;

	// ���ļ�,��ȡ����;
	CFile cf;
	CFileException e;
	if (!cf.Open(szdbcfgFile, CFile::modeRead, &e))
	{
		// ���ļ�ʧ��;
		e.ReportError();
		return FALSE;
	}

	DBSAVE dbcfg;
	// ���STRemoteInfo�ṹ;
	ZeroMemory(&dbcfg, sizeof(DBSAVE));

	INT nCount = cf.Read(&dbcfg, sizeof(DBSAVE));
	if (nCount != sizeof(DBSAVE))
	{
		cf.Close();
		return FALSE;
	}

	// �����Դ;
	cf.Close();

	// ��������;
	TCHAR szHost[51] = {0};
	for (int i = 0; i < 50; i++)
	{
		if (dbcfg.server[i])
			szHost[i] = 500 - dbcfg.server[i];// = 500 - dbcfg.server[i];
		if (dbcfg.user[i])
			dbcfg.user[i] = 500 - dbcfg.user[i];
		if (dbcfg.psw[i])
			dbcfg.psw[i] = 500 - dbcfg.psw[i];
	}

	CString strHost = _T("");
	strHost.Format(_T("%s"),szHost);

	strHost.TrimLeft();
	strHost.TrimRight(".");
	strHost.TrimRight();
	if (strHost.Find(".ly.com") == -1 && strHost.Find("192.168.") == -1)
		MyGetIPByName(strHost);

	// ���Դ򿪹���Ŀ¼;
	TCHAR szShareOriginal[MAX_PATH] = {_T("")};
	TCHAR szShareEarly[MAX_PATH] = { _T("") };
	TCHAR szShareFurther[MAX_PATH] = { _T("") };
	TCHAR szShareDesign[MAX_PATH] = { _T("") };

	sprintf(szShareOriginal, _T("\\\\%s\\%s"), strHost, _T("�ͻ�ԭƬ(��������)$"));
	sprintf(szShareEarly, _T("\\\\%s\\%s"), strHost, _T("�޺õ�Ƭ(��������)$"));
	sprintf(szShareFurther, _T("\\\\%s\\%s"), strHost, _T("���޺õ�Ƭ(��������)$"));
	sprintf(szShareDesign, _T("\\\\%s\\%s"), strHost, _T("��ƺõ�Ƭ(��������)$"));

	if (!PathFileExists(szShareOriginal) || !PathFileExists(szShareEarly) ||
		!PathFileExists(szShareFurther)  || !PathFileExists(szShareDesign) )
		return FALSE;

	return TRUE;
}

BOOL IsValidDate(LPCTSTR lpDate)	// �жϹ���;
{
	if (lpDate == NULL || _tcscmp(lpDate, _T("")) == 0)
		return FALSE;

	CString strDate = lpDate;
	if (strDate.IsEmpty()) return FALSE;

	// �ж����ںϷ���;
	static int nYear = 0;
	static int nMonth = 0;
	static int nDay = 0;

	nYear = nMonth = nDay = 0;
	nYear = _ttoi(strDate.Left(4));

	nMonth = _ttoi(strDate.Mid(5, 2));
	nDay = _ttoi(strDate.Mid(8, 2));

	CONST static INT nNormalMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	CONST static INT nLeapMonth[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	if ((nDay <= 0) || (nDay > 31) || (nMonth <= 0) || (nMonth > 12)) return FALSE;

	if ((nYear % 400 == 0) || (nYear % 4 == 0 && nYear % 100 != 0))
	{
		if (nDay > nLeapMonth[nMonth - 1])	return FALSE;
	}
	else
	{
		if (nDay > nNormalMonth[nMonth - 1]) return FALSE;
	}

	return TRUE;
}

BOOL IsValidLunanrDate(LPCTSTR lpDate)	// �ж�ũ��;
{
	if (lpDate == NULL || _tcscmp(lpDate, _T("")) == 0)
		return FALSE;

	CString strDate = lpDate;
	if (strDate.IsEmpty()) return FALSE;

	static int lunar_year, lunar_month, lunar_day;
	lunar_year = lunar_month = lunar_day = 0;

	lunar_year = _ttoi(strDate.Left(4));
	lunar_month = _ttoi(strDate.Mid(5, 2));
	lunar_day = _ttoi(strDate.Mid(8, 2));

	//Խ���飬���Խ�磬������Ч����;
	if (lunar_year <= BEGIN_YEAR || lunar_year > BEGIN_YEAR + NUMBER_YEAR - 1)
		return FALSE;

	if (lunar_month < 1 || lunar_month > 12)
		return FALSE;

	// 1.ũ�����Ƿ�������;
	int nYearIndex = lunar_year - BEGIN_YEAR;
	int leap_month = (LUNAR_YEARS[nYearIndex] >> 20) & 0xF;

	// 2.�·ݴ�С������;
	int month_day = 0;
	if ((LUNAR_YEARS[nYearIndex] >> (7 + 13 - lunar_month)) & 0x1)
		month_day = 30;
	else
		month_day = 29;

	if (lunar_day < 0 || lunar_day > month_day)
		return FALSE;

	return TRUE;
}

//************************************//
// [����]: IsExistNumInString
// [����]: ����Ƿ�������
// [����]: 
//		str					�ִ�
// [����]: 1�����֣�0û��
//************************************//
int IsExistNumInString(const char* str)
{
	if(str == NULL)
		return 0;

	//�ַ�0~9 ��Ӧ�� ascii��48~57
	for(int i=0; i<strlen(str); i++)
	{
		if(str[i] >= 48 && str[i] <= 57)
			return 1;
	}
	return 0;
}

/************************************************************************/
/*
����:SaveImg2newfile
����:��Image��������Ϊ������ʽ���ļ�;
����:
IN:  pImg		GDI+ Image����ָ��,��Ҫ�����ͼ�����;
IN:	 lpnewfile	������ʽ�����ļ���(jpg,bmp,png,jpeg);
IN:  uQuality	����Ϊ���ļ�ʱ��ͼ������ֵ;
����:

ע��:Image::Save ���ļ�����,�Ḳ�Ǵ��ڵ��ļ�;
*/
/************************************************************************/
BOOL SaveImg2newfile(IN Image* pImg, IN CString strNewfile, IN ULONG uQuality)
{
	if (pImg == NULL) return FALSE;

	// ��Ҫ�ж�·���Ƿ����,�����ڴ���Ŀ¼;
	int nIndex = strNewfile.ReverseFind(_T('\\'));
	if (nIndex == -1)
		return FALSE;

	if (!PathFileExists(strNewfile.Left(nIndex)))
	{
		// ����ļ��в�����,����;
		CreateDirectory(strNewfile.Left(nIndex), NULL);
	}

	nIndex = strNewfile.ReverseFind(_T('.'));
	if (nIndex == -1)
		return FALSE;

	Status stat = GenericError;
	CLSID encoderClsid = { 0 };
	BSTR newfile = strNewfile.AllocSysString();

	strNewfile = strNewfile.Mid(nIndex + 1);
	if (strNewfile.CompareNoCase(_T("bmp")) == 0)
	{
		GetEncoderClsid(L"image/bmp", &encoderClsid);
		stat = pImg->Save(newfile, &encoderClsid, NULL);
	}
	else if (strNewfile.CompareNoCase(_T("png")) == 0)
	{
		GetEncoderClsid(L"image/png", &encoderClsid);
		stat = pImg->Save(newfile, &encoderClsid, NULL);
	}
	else// if ( strNewfile.CompareNoCase(_T("jpeg")) == 0 )
	{
		GetEncoderClsid(L"image/jpeg", &encoderClsid);

		EncoderParameters encoderParameters;
		encoderParameters.Count = 1;
		encoderParameters.Parameter[0].Guid = EncoderQuality;
		encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
		encoderParameters.Parameter[0].NumberOfValues = 1;
		// Save the image as a JPEG with quality level 100.
		encoderParameters.Parameter[0].Value = &uQuality;
		stat = pImg->Save(newfile, &encoderClsid, &encoderParameters);
	}
	SysFreeString(newfile);

	return stat == Ok ? TRUE : FALSE;
}

/************************************************************************/
/*
����:ZoomImg
����:���ŵ�ָ����С��������,�������ź�ijߴ�;
����:
IN:		Imgrc			ͼ��Ĵ�С;
IN:		dwDisplayPix	ͼ��Ҫ��ʾ������Ĵ�С;
OUT:	dwZoomPix		ͼ������ʾ���������ź�ijߴ�;
����:

ע��:dwZoomPix�ijߴ������dwDisplayPix��;
*/
/************************************************************************/
int ZoomImg(IN CRect &Imgrc, IN CONST DWORD &dwDisplayPix, OUT DWORD &dwZoomPix)
{
	double fDisplayWidth = GET_XPIX(dwDisplayPix);
	double fDisplayHeight = GET_YPIX(dwDisplayPix);

	// ��ʾ���򳤿���;
	double fDisplayAspectRatio = fDisplayWidth / fDisplayHeight;

	// ͼƬ������;
	double fImgAspectRatio = ((double)Imgrc.Width()) / ((double)Imgrc.Height());

	double fZoomWidth;
	double fZoomHeight;

	if (fDisplayAspectRatio > fImgAspectRatio)
	{
		fZoomWidth = fDisplayHeight*fImgAspectRatio;
		fZoomHeight = fDisplayHeight;
	}
	else
	{
		fZoomWidth = fDisplayWidth;
		fZoomHeight = fDisplayWidth / fImgAspectRatio;
	}

	dwZoomPix = SET_PIX((int)fZoomWidth, (int)fZoomHeight);

	//////////////////////////////////////////////////////////////////////////
	int nRetval = 0;
	if ((fDisplayWidth == Imgrc.Width()) && (fDisplayHeight == Imgrc.Height()))
	{
		nRetval = ZoomNull;
	}
	else if ((fDisplayWidth > Imgrc.Width()) && (fDisplayHeight > Imgrc.Height()))
	{
		nRetval = ZoomOut;
	}
	else
	{
		nRetval = ZoomIn;
	}

	return nRetval;
}

int ZoomImg(IN CONST DWORD &dwImgPix, IN CONST DWORD &dwDisplayPix, OUT DWORD &dwZoomPix)
{
	double fDisplayWidth = GET_XPIX(dwDisplayPix);
	double fDisplayHeight = GET_YPIX(dwDisplayPix);

	// ��ʾ���򳤿���;
	double fDisplayAspectRatio = fDisplayWidth / fDisplayHeight;

	// ͼƬ������;
	double fImgAspectRatio = ((double)GET_XPIX(dwImgPix)) / ((double)GET_YPIX(dwImgPix));

	double fZoomWidth;
	double fZoomHeight;

	if (fDisplayAspectRatio > fImgAspectRatio)
	{
		fZoomWidth = fDisplayHeight*fImgAspectRatio;
		fZoomHeight = fDisplayHeight;
	}
	else
	{
		fZoomWidth = fDisplayWidth;
		fZoomHeight = fDisplayWidth / fImgAspectRatio;
	}

	dwZoomPix = SET_PIX((int)fZoomWidth, (int)fZoomHeight);

	//////////////////////////////////////////////////////////////////////////
	int nRetval = 0;
	if ((fDisplayWidth == GET_XPIX(dwImgPix)) && (fDisplayHeight == GET_YPIX(dwImgPix)))
	{
		nRetval = ZoomNull;
	}
	else if ((fDisplayWidth > GET_XPIX(dwImgPix)) && (fDisplayHeight > GET_YPIX(dwImgPix)))
	{
		nRetval = ZoomOut;
	}
	else
	{
		nRetval = ZoomIn;
	}

	return nRetval;
}

/************************************************************************/
/*
����:ImgThumbnail
����:���ɸ�������ͼ������ͼ;
����:
	IN Image* pImg,								ԭͼָ��
	IN CONST DWORD &dwDisplayPix,				SET_PIX(100,76) = 100*76��С
	IN CString strNewfile,						�µ�ͼƬ��
	IN ULONG uQuality							����ͼ����0~100
����:

ע��:Ϊ�˽�׳��,strNewfile��·�������ں������ٴ��ж��Ƿ���Ч,��ֹ�ں�����û�н��о��ж�;
*/
/************************************************************************/
BOOL ImgThumbnail(IN Image* pImg, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality)
{
	if (pImg == NULL) return FALSE;

	DWORD dwZoomPix;
	int retval = ZoomImg(SET_PIX(pImg->GetWidth(), pImg->GetHeight()), dwDisplayPix, dwZoomPix);
	if (retval == ZoomNull)
	{
		return SaveImg2newfile(pImg, strNewfile, uQuality);
	}

	// ��������ͼ;
	Bitmap bitmap(GET_XPIX(dwZoomPix), GET_YPIX(dwZoomPix));
	Graphics *graphic = Graphics::FromImage(&bitmap);
	graphic->Clear(Color(255, 255, 255, 255));

	graphic->SetInterpolationMode(InterpolationModeHighQualityBicubic);
	graphic->SetSmoothingMode(SmoothingModeHighQuality);//SmoothingModeHighSpeed
	graphic->SetPixelOffsetMode(PixelOffsetModeHighQuality);
	graphic->SetCompositingMode(CompositingModeSourceOver);
	graphic->SetCompositingQuality(CompositingQualityHighQuality);
	graphic->SetTextRenderingHint(TextRenderingHintAntiAliasGridFit);
	graphic->DrawImage(pImg, 0, 0, GET_XPIX(dwZoomPix), GET_YPIX(dwZoomPix));

	delete graphic;

	// ��������ͼ;
	return SaveImg2newfile(&bitmap, strNewfile, uQuality);
}

/************************************************************************/
/*
����:ImgThumbnail
����:���ɸ�������ͼ������ͼ;
����:
	IN LPCTSTR lpImgpath,
	IN CONST DWORD &dwDisplayPix,
	IN CString strNewfile, 
	IN ULONG uQuality
����:

ע��:Ϊ�˽�׳��,strNewfile��·�������ں������ٴ��ж��Ƿ���Ч,��ֹ�ں�����û�н��о��ж�;
*/
/************************************************************************/
BOOL ImgThumbnail(IN LPCTSTR lpImgpath, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality)
{
	if (!PathFileExists(lpImgpath))
		return FALSE;

#ifdef UNICODE
	Image Img(lpImgpath);
#else
	BSTR strtmp = _bstr_t(lpImgpath);
	Image Img(strtmp);
	SysFreeString(strtmp);
#endif

	DWORD dwZoomPix;
	int retval = ZoomImg(SET_PIX(Img.GetWidth(), Img.GetHeight()), dwDisplayPix, dwZoomPix);
	if (retval == ZoomNull)
	{
		return SaveImg2newfile(&Img, strNewfile, uQuality);
	}

	// ��������ͼ;
	Bitmap bitmap(GET_XPIX(dwZoomPix), GET_YPIX(dwZoomPix));
	Graphics *graphic = Graphics::FromImage(&bitmap);
	graphic->Clear(Color(255, 255, 255, 255));

	graphic->SetInterpolationMode(InterpolationModeHighQualityBicubic);
	graphic->SetSmoothingMode(SmoothingModeHighQuality);//SmoothingModeHighSpeed
	graphic->SetPixelOffsetMode(PixelOffsetModeHighQuality);
	graphic->SetCompositingMode(CompositingModeSourceOver);
	graphic->SetCompositingQuality(CompositingQualityHighQuality);
	graphic->SetTextRenderingHint(TextRenderingHintAntiAliasGridFit);
	graphic->DrawImage(&Img, 0, 0, GET_XPIX(dwZoomPix), GET_YPIX(dwZoomPix));

	delete graphic;

	// ��������ͼ;
	return SaveImg2newfile(&bitmap, strNewfile, uQuality);
}

/*-----------------------------------DES���ܽ��� ģ�� begin--------------------------------------------*/
DESEncrypt g_DESEncrypt = NULL;
DESDecrypt g_DESDecrypt = NULL;
/*-----------------------------------DES���ܽ��� ģ�� end--------------------------------------------*/

/*-----------------------------------��ȡӲ����Ϣ ģ�� begin--------------------------------------------*/
HMODULE					g_hHDSerial = NULL;
GetSeiralNumberOrID		g_GetSeiralNumberOrID = NULL;
GetLocalMacAddr			g_GetLocalMacAdd = NULL;

BOOL LoadHDSerialLibrary()
{
	if (g_hHDSerial == NULL)
		g_hHDSerial = LoadLibrary(_T("lyfzHDSerial.dll"));

	if (g_hHDSerial == NULL)
	{
		//dwError = GetLastError();
		AfxMessageBox(_T("���ض�ȡӲ����Ϣģ��ʧ�ܣ�"));
		return FALSE;
	}

	g_GetSeiralNumberOrID = (GetSeiralNumberOrID)::GetProcAddress(g_hHDSerial, "GetSeiralNumberOrID");
	g_GetLocalMacAdd = (GetLocalMacAddr)::GetProcAddress(g_hHDSerial, "GetLocalMacAddr");

	g_DESEncrypt = (DESEncrypt)::GetProcAddress(g_hHDSerial, "DESEncrypt");
	g_DESDecrypt = (DESDecrypt)::GetProcAddress(g_hHDSerial, "DESDecrypt");
	if (!g_GetSeiralNumberOrID || !g_GetLocalMacAdd)
	{
		AfxMessageBox(_T("���ض�ȡӲ����Ϣģ��ӿ�ʧ�ܣ�"));
		return FALSE;
	}

	if(!g_DESEncrypt || !g_DESDecrypt)
	{
		AfxMessageBox(_T("���ؼ��ܽ��ܽӿ�ʧ�ܣ�"));
		return FALSE;
	}
	return TRUE;
}

void FreeHDSerialLibrary()
{
	if (g_hHDSerial)
		FreeLibrary(g_hHDSerial);
	g_hHDSerial = NULL;
	g_GetSeiralNumberOrID = NULL;
	g_GetLocalMacAdd = NULL;
	g_DESEncrypt = NULL;
	g_DESDecrypt = NULL;
}
/*-----------------------------------��ȡӲ����Ϣ ģ�� end--------------------------------------------*/
#ifdef USE_KERNEL_DLL
/************************************************************************/
/*  ������CreateIMGProcess[3/1/2016 IT];
/*  ����������lyfzIMGProcess.dllģ��ʵ�����;
/*  ������;
/*  ���أ��ɹ����ؾ��ֵ,���򷵻�NULL;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
ImgEnvInterface* CreateIMGProcess( )
{  
	//���ض�̬��;
	DWORD dwError = 0;
	HMODULE hKernelDll = ( HMODULE )LoadLibrary( _T("lyfzIMGProcess.dll") );
	if ( hKernelDll )
	{
		//��ȡ�����ӿڵĺ���
		CREATEIMGPROCESS pInstance = (CREATEIMGPROCESS)GetProcAddress( hKernelDll, "CreateIMGProcess" );
		if ( pInstance )
		{
			//�����ӿ�
			ImgEnvInterface * pIMGProcess = pInstance( );
			//���ؽӿ�
			return pIMGProcess;
		}
		else
		{
			dwError = GetLastError();
		}
	}
	else
	{
		dwError = GetLastError();
	}

	if ( ERROR_SUCCESS != dwError )
	{// ����ʱ��������;
		CString strError = _T("");
		strError.Format(_T("����lyfzIMGProcess.dllʱ������������=%d"), dwError);
		WriteTextLog(strError);
	}

	return NULL;
}

ImgEnvInterface *g_pIMGProcess = NULL;

/************************************************************************/
/*  ������GetOrderpathByImgType[3/1/2016 IT];
/*  ������������������Ƭ���ͣ�ԭƬ������Ƭ������Ƭ�����Ƭ������ȡȫ����������Ƭ����·��;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[OUT] AryOrderpath��Ҫ���ص����ж�������Ƭ����Ŀ¼;
/*  ���أ��ɹ���ȡĿ¼����TRUE;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetOrderpathByImgType(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, OUT CStringArray& AryOrderpath)
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	CString str;
	HGLOBAL hMemery;
	DWORD dwMemSize = 0;
	hMemery = g_pIMGProcess->GetBranchAllOrderDirectory(nImgType, lpBranchId, dwMemSize);
	if ( hMemery )
	{
		BYTE *pData = (BYTE*)GlobalLock(hMemery);
		if ( pData == NULL )
		{
			GlobalUnlock(hMemery);
			GlobalFree(hMemery);
			return FALSE;
		}

		CMemFile mf;
		mf.Attach(pData, dwMemSize);
		CArchive ar(&mf, CArchive::load);

		AryOrderpath.Serialize(ar);
		ar.Close();
		mf.Detach();

		GlobalUnlock(hMemery);
		GlobalFree(hMemery);

		return TRUE;
	}

	return FALSE;
}

/************************************************************************/
/*  ������GetOrderpathByOrderNum[3/1/2016 IT];
/*  ���������ݷֵ���������Ƭ���͡�����������ȡ������ȫ������Ŀ¼;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[IN] lpOrderNum��������;
/*  	[OUT] AryOrderpath������ָ����������ƬĿ¼�����ʹ�ö�Ŀ¼������������ܴ���1��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetOrderpathByOrderNum(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, OUT CStringArray& AryOrderpath)
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	CString str;
	HGLOBAL hMemery;
	DWORD dwMemSize = 0;
	hMemery = g_pIMGProcess->GetOrderAllShareDirectory(nImgType, lpBranchId, lpOrderNum, dwMemSize);
	if ( hMemery )
	{
		BYTE *pData = (BYTE*)GlobalLock(hMemery);
		if ( pData == NULL )
		{
			GlobalUnlock(hMemery);
			GlobalFree(hMemery);
			return FALSE;
		}

		CMemFile mf;
		mf.Attach(pData, dwMemSize);
		CArchive ar(&mf, CArchive::load);

		AryOrderpath.Serialize(ar);
		ar.Close();
		mf.Detach();

		GlobalUnlock(hMemery);
		GlobalFree(hMemery);

		return TRUE;
	}

	return FALSE;
}

/************************************************************************/
/*  ������GetScenerypathByOrderNum[3/1/2016 IT];
/*  ��������ȡָ��������������ȫ������Ŀ¼;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[IN] lpOrderNum��������;
/*  	[IN] lpScenery��������;
/*  	[OUT] AryScenerypath������ָ����������ƬĿ¼�����ʹ�ö�Ŀ¼������������ܴ���1��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetScenerypathByOrderNum(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpScenery, OUT CStringArray& AryScenerypath)
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	CString str;
	HGLOBAL hMemery;
	DWORD dwMemSize = 0;
	hMemery = g_pIMGProcess->GetSceneryAllShareDirectory(nImgType, lpBranchId, lpOrderNum, lpScenery, dwMemSize);
	if ( hMemery )
	{
		BYTE *pData = (BYTE*)GlobalLock(hMemery);
		if ( pData == NULL )
		{
			GlobalUnlock(hMemery);
			GlobalFree(hMemery);
			return FALSE;
		}

		CMemFile mf;
		mf.Attach(pData, dwMemSize);
		CArchive ar(&mf, CArchive::load);

		AryScenerypath.Serialize(ar);
		ar.Close();
		mf.Detach();

		GlobalUnlock(hMemery);
		GlobalFree(hMemery);

		return TRUE;
	}

	return FALSE;
}

/************************************************************************/
/*  ������GetOrderImgpath[3/1/2016 IT];
/*  ��������ȡָ�������ŵ�ȫ����Ƭ·��;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[IN] lpOrderNum��������;
/*  	[OUT] AryImgpath������ָ��������ȫ����Ƭ·��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetOrderImgpath(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, OUT CStringArray& AryImgpath)
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	CString str;
	DWORD dwMemSize = 0;
	ImgLoadOrderpathInterface *pOrderLoader = NULL;
	g_pIMGProcess->QueryInterface(IID_ImgLoadOrderpathInterface,(void**)&pOrderLoader);
	if ( pOrderLoader )
	{
		HGLOBAL hMemery = pOrderLoader->LoadOrderImages( nImgType, lpBranchId, lpOrderNum, _T("*.jpg|*.jpeg"), dwMemSize);
		if ( hMemery )
		{
			BYTE *pData = (BYTE*)GlobalLock(hMemery);
			if ( pData == NULL )
			{
				GlobalUnlock(hMemery);
				GlobalFree(hMemery);
				return FALSE;
			}

			CMemFile mf;
			mf.Attach(pData, dwMemSize);
			CArchive ar(&mf, CArchive::load);

			AryImgpath.Serialize(ar);
			ar.Close();
			mf.Detach();

			GlobalUnlock(hMemery);
			GlobalFree(hMemery);
		}

		pOrderLoader->Release();
		return TRUE;
	}

	return FALSE;
}

/************************************************************************/
/*  ������GetOrderImgpathEx[3/1/2016 IT];
/*  ��������ȡָ��������ȫ����Ƭ·��;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[IN] lpOrderNum��������;
/*		[IN] bLoadInSubfolder���Ƿ���ض���Ŀ¼�µ���Ŀ¼;
/*		[IN] lpLoadExt��Ҫ���ص���Ƭ��չ��;
/*		[IN] lpWithExt��Ҫ���ӵ���Ƭ��չ��;
/*		[IN] AryLoadExtImgpath��ָ��������չ������Ƭ·��;
/*		[IN] AryWithExtImgpath��ָ��������չ������Ƭ·��;
/*		[IN] AryOrderDirectory��ָ�������ŵ���Ƭ����Ŀ¼����Ŀ¼�¿��ܴ���1��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetOrderImgpathEx(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN BOOL bLoadInSubfolder, IN LPCTSTR lpLoadExt, IN LPCTSTR lpWithExt, OUT CStringArray& AryLoadExtImgpath, OUT CStringArray& AryWithExtImgpath, OUT CStringArray& AryOrderDirectory )
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	DWORD dwReturnSize = 0;
	ImgLoadOrderpathExInterface *pOrderLoader = NULL;
	g_pIMGProcess->QueryInterface(IID_ImgLoadOrderpathExInterface,(void**)&pOrderLoader);
	if ( pOrderLoader )
	{
		pOrderLoader->Release();
		HGLOBAL hMemery = pOrderLoader->LoadOrderImagesEx(nImgType, lpBranchId, lpOrderNum, TRUE, lpLoadExt, lpWithExt, dwReturnSize);
		if ( hMemery )
		{
			BYTE* pMemery = (BYTE*)GlobalLock(hMemery);
			if ( pMemery == NULL )
			{
				GlobalUnlock(hMemery);
				GlobalFree(hMemery);
				return FALSE;
			}

			DWORD dwSize = 0;
			DWORD dw1 = 0,dw2 = 0,dw3 = 0;
			CMemFile memfile[3];

			memcpy(&dw1, pMemery + dwSize, sizeof(DWORD));
			dwSize += sizeof(DWORD);
			memfile[0].Attach(pMemery+dwSize, dw1);
			dwSize += dw1;

			memcpy(&dw2, pMemery + dwSize, sizeof(DWORD));
			dwSize += sizeof(DWORD);
			memfile[1].Attach(pMemery+dwSize, dw2);
			dwSize += dw2;

			memcpy(&dw3, pMemery + dwSize, sizeof(DWORD));
			dwSize += sizeof(DWORD);
			memfile[2].Attach(pMemery+dwSize, dw3);
			dwSize += dw3;

			CArchive a1(&memfile[0],CArchive::load);
			CArchive a2(&memfile[1],CArchive::load);
			CArchive a3(&memfile[2],CArchive::load);

			AryLoadExtImgpath.Serialize(a1);
			AryWithExtImgpath.Serialize(a2);
			AryOrderDirectory.Serialize(a3);

			a1.Close();
			a2.Close();
			a3.Close();
			memfile[0].Detach();
			memfile[1].Detach();
			memfile[2].Detach();

			if (hMemery)
			{
				GlobalUnlock(hMemery);
				GlobalFree(hMemery);
			}

			return TRUE;
		}
	}

	return FALSE;
}

/************************************************************************/
/*  ������GetOrderImgpath[3/1/2016 IT];
/*  ��������ȡָ�������ŵ�ȫ����Ƭ·��;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[IN] lpOrderNum��������;
/*		[IN] lpScenery������������ϵ��;
/*  	[OUT] AryImgpath������ָ��������ȫ����Ƭ·��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetSceneryImgpath(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpScenery, OUT CStringArray& AryImgpath)
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	CString str;
	DWORD dwMemSize = 0;
	ImgLoadOrderpathInterface *pOrderLoader = NULL;
	g_pIMGProcess->QueryInterface(IID_ImgLoadOrderpathInterface,(void**)&pOrderLoader);
	if ( pOrderLoader )
	{
		HGLOBAL hMemery = pOrderLoader->LoadSceneryImages( nImgType, lpBranchId, lpOrderNum, lpScenery, _T("*.jpg|*.jpeg"), dwMemSize);
		if ( hMemery )
		{
			BYTE *pData = (BYTE*)GlobalLock(hMemery);
			if ( pData == NULL )
			{
				GlobalUnlock(hMemery);
				GlobalFree(hMemery);
				return FALSE;
			}

			CMemFile mf;
			mf.Attach(pData, dwMemSize);
			CArchive ar(&mf, CArchive::load);

			AryImgpath.Serialize(ar);
			ar.Close();
			mf.Detach();

			GlobalUnlock(hMemery);
			GlobalFree(hMemery);
		}

		pOrderLoader->Release();
		return TRUE;
	}

	return FALSE;
}

/************************************************************************/
/*  ������GetOrderImgpathEx[3/1/2016 IT];
/*  ��������ȡָ��������ȫ����Ƭ·��;
/*  ������;
/*  	[IN] nImgType����Ƭ���ͣ�1 = ԭƬ��2 = ����Ƭ��3 = ����Ƭ��4 = ���Ƭ��5~8����Ƭ��;
/*  	[IN] lpBranchId���ֵ�����;
/*  	[IN] lpOrderNum��������;
/*		[IN] bLoadInSubfolder���Ƿ���ض���Ŀ¼�µ���Ŀ¼;
/*		[IN] lpLoadExt��Ҫ���ص���Ƭ��չ��;
/*		[IN] lpWithExt��Ҫ���ӵ���Ƭ��չ��;
/*		[IN] AryLoadExtImgpath��ָ��������չ������Ƭ·��;
/*		[IN] AryWithExtImgpath��ָ��������չ������Ƭ·��;
/*		[IN] AryOrderDirectory��ָ�������ŵ���Ƭ����Ŀ¼����Ŀ¼�¿��ܴ���1��;
/*  ���أ�void;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
BOOL GetSceneryImgpathEx(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpScenery, IN LPCTSTR lpLoadExt, IN LPCTSTR lpWithExt, OUT CStringArray& AryLoadExtImgpath, OUT CStringArray& AryWithExtImgpath, OUT CStringArray& AryOrderDirectory )
{
	if ( lpBranchId == NULL || lpBranchId[0] == '\0' || !_tcsstr(lpBranchId, _T(".ly.com")))
	{
		OutputDebugString(lpBranchId);
		OutputDebugString(_T("\n�ֵ�������Ч��\n"));
		return FALSE;
	}

	if ( nImgType > DBImgtype || nImgType < OImgtype )
	{
		OutputDebugString(_T("\n����Ƭ���Ͳ����ڣ�\n"));
		return FALSE;
	}

	if ( g_pIMGProcess == NULL )
		return FALSE;

	DWORD dwReturnSize = 0;
	ImgLoadOrderpathExInterface *pOrderLoader = NULL;
	g_pIMGProcess->QueryInterface(IID_ImgLoadOrderpathExInterface,(void**)&pOrderLoader);
	if ( pOrderLoader )
	{
		pOrderLoader->Release();
		HGLOBAL hMemery = pOrderLoader->LoadSceneryImagesEx(nImgType, lpBranchId, lpOrderNum, lpScenery, lpLoadExt, lpWithExt, dwReturnSize);
		if ( hMemery )
		{
			BYTE* pMemery = (BYTE*)GlobalLock(hMemery);
			if ( pMemery == NULL )
			{
				GlobalUnlock(hMemery);
				GlobalFree(hMemery);
				return FALSE;
			}

			DWORD dwSize = 0;
			DWORD dw1 = 0,dw2 = 0,dw3 = 0;
			CMemFile memfile[3];

			memcpy(&dw1, pMemery + dwSize, sizeof(DWORD));
			dwSize += sizeof(DWORD);
			memfile[0].Attach(pMemery+dwSize, dw1);
			dwSize += dw1;

			memcpy(&dw2, pMemery + dwSize, sizeof(DWORD));
			dwSize += sizeof(DWORD);
			memfile[1].Attach(pMemery+dwSize, dw2);
			dwSize += dw2;

			memcpy(&dw3, pMemery + dwSize, sizeof(DWORD));
			dwSize += sizeof(DWORD);
			memfile[2].Attach(pMemery+dwSize, dw3);
			dwSize += dw3;

			CArchive a1(&memfile[0],CArchive::load);
			CArchive a2(&memfile[1],CArchive::load);
			CArchive a3(&memfile[2],CArchive::load);

			AryLoadExtImgpath.Serialize(a1);
			AryWithExtImgpath.Serialize(a2);
			AryOrderDirectory.Serialize(a3);

			a1.Close();
			a2.Close();
			a3.Close();
			memfile[0].Detach();
			memfile[1].Detach();
			memfile[2].Detach();

			if (hMemery)
			{
				GlobalUnlock(hMemery);
				GlobalFree(hMemery);
			}

			return TRUE;
		}
	}

	return FALSE;
}
#endif // USE_KERNEL_DLL

/************************************************************************/
/*  ������IsDigitString[3/28/2016 IT];
/*  ������;
/*  ������;
/*  	[IN] ��;
/*  ���أ�����2��ʾ������, ����1��ʾ����, ����-1��ʾ��������;
/*  ע�⣺;
/*  ʾ����;
/*
/*  �޸ģ�;
/*  ���ڣ�;
/*  ���ݣ�;
/************************************************************************/
int IsDigitString(IN CONST CString& str)
{
	int npt = 0;
	for (int i = 0; i < str.GetLength(); i++)
	{
		if (!_istdigit(str.GetAt(i)))
		{
			if ( str.GetAt(i) == _T('.') && i != 0)
			{
				if ( npt > 1)
				{
					return -1;
				}

				npt++;
			}
			else
			{
				return -1;
			}
		}
	}

	return npt ? 2 : 1;
}

BOOL Import2Excle(IN CListCtrl *pListCtrl, IN LPCTSTR lpExclePath, IN CONST int& nStartColumn, IN CONST int& nStartRow, IN int nEndColumn, IN int nEndRow)
{
	if ( pListCtrl == NULL || 
		lpExclePath == NULL || 
		nStartColumn < 0 || 
		nStartRow < 0 ||
		(nEndColumn != -1 && nEndColumn <= nStartColumn) ||
		(nEndRow != -1 && nEndRow <= nStartRow) )
	{
		OutputDebugString(_T("������Ч\n"));
		return FALSE;
	}

	if ( pListCtrl->GetItemCount() - nStartRow <= 0 || (nEndRow != -1 && nEndRow >= pListCtrl->GetItemCount()))
	{
		OutputDebugString(_T("�����õ���\n"));
		return FALSE;
	}

	// CListCtrl��ͷ��Ϣ;
	CHeaderCtrl* pHeaderCtrl = pListCtrl->GetHeaderCtrl();
	if( !pHeaderCtrl )
	{
		OutputDebugString(_T("��ȡCListCtrl��ͷʧ��\n"));
		return FALSE;
	}

	if ( nStartColumn >= pHeaderCtrl->GetItemCount() || 
		( nEndColumn != -1 && nEndColumn >= pHeaderCtrl->GetItemCount()) )
	{
		OutputDebugString(_T("��ѡ�г�����Χ\n"));
		return FALSE;
	}

	if ( nEndRow == -1 )
	{
		nEndRow = pListCtrl->GetItemCount();
	}

	if ( nEndColumn == -1 )
	{
		nEndColumn = pHeaderCtrl->GetItemCount();
	}

	// ��ȡ��ͷ�ֶ���Ϣ;
	LVCOLUMN lv;
	TCHAR szText[MAX_PATH];

	lv.mask = LVCF_TEXT;
	lv.cchTextMax = MAX_PATH;
	lv.pszText = szText;
	int i = 0, j = 0;

	BasicExcel e;
	e.New(3);
	e.RenameWorksheet((size_t)0, L"����1");
	BasicExcelWorksheet* sheet1 = e.GetWorksheet(L"����1");
	for( i = nStartColumn, j = 0; i < nEndColumn; i++)
	{
		pListCtrl->GetColumn(i, &lv);
		sheet1->Cell(0,j++)->SetWString(lv.pszText);
	}

	// ��ȡ��������;
	int nRet;
	CString str;
	int nCurRow = 1, nCurColumn;
	for ( i = nStartRow; i < nEndRow; i++, nCurRow++ )
	{
		nCurColumn = 0;
		for ( j = nStartColumn; j < nEndColumn; j++)
		{
#if 0
			str = pListCtrl->GetItemText(i, j);
			// �ж������������ַ���;
			nRet = IsDigitString(str);
			if ( nRet == 1 )
			{
				nRet = atol(str);
				if ( nRet != -1 && !str.IsEmpty() && str.GetLength() < 6 ) // 6λ���Ȳ�תΪ����;
					sheet1->Cell(nCurRow,nCurColumn++)->SetInteger(nRet);
				else
					sheet1->Cell(nCurRow,nCurColumn++)->SetWString(str);
			}
			else if ( nRet == 2 )
			{
				sheet1->Cell(nCurRow,nCurColumn++)->SetInteger(atof(str));
			}
			else
			{
				sheet1->Cell(nCurRow,nCurColumn++)->SetWString(str);
			}
#else
			str = pListCtrl->GetItemText(i, j);
			sheet1->Cell(nCurRow,nCurColumn++)->SetWString(str);
#endif
		}
	}

	e.SaveAs(lpExclePath);
	return TRUE;
}


BOOL Import2Xls(IN CListCtrl *pListCtrl, IN LPCTSTR lpExclePath, IN CONST int& nStartColumn, IN CONST int& nStartRow, IN int nEndColumn, IN int nEndRow)
{
	if ( pListCtrl == NULL || 
		lpExclePath == NULL || 
		nStartColumn < 0 || 
		nStartRow < 0 ||
		(nEndColumn != -1 && nEndColumn <= nStartColumn) ||
		(nEndRow != -1 && nEndRow <= nStartRow) )
	{
		OutputDebugString(_T("������Ч\n"));
		return FALSE;
	}

	if ( pListCtrl->GetItemCount() - nStartRow <= 0 || (nEndRow != -1 && nEndRow >= pListCtrl->GetItemCount()))
	{
		OutputDebugString(_T("�����õ���\n"));
		return FALSE;
	}

	// CListCtrl��ͷ��Ϣ;
	CHeaderCtrl* pHeaderCtrl = pListCtrl->GetHeaderCtrl();
	if( !pHeaderCtrl )
	{
		OutputDebugString(_T("��ȡCListCtrl��ͷʧ��\n"));
		return FALSE;
	}

	if ( nStartColumn >= pHeaderCtrl->GetItemCount() || 
		( nEndColumn != -1 && nEndColumn >= pHeaderCtrl->GetItemCount()) )
	{
		OutputDebugString(_T("��ѡ�г�����Χ\n"));
		return FALSE;
	}

	if ( nEndRow == -1 )
	{
		nEndRow = pListCtrl->GetItemCount();
	}

	if ( nEndColumn == -1 )
	{
		nEndColumn = pHeaderCtrl->GetItemCount();
	}

	// ��ȡ��ͷ�ֶ���Ϣ;
	LVCOLUMN lv;
	TCHAR szText[MAX_PATH];

	lv.mask = LVCF_TEXT;
	lv.cchTextMax = MAX_PATH;
	lv.pszText = szText;
	int i = 0, j = 0;

	CArray<CStringArray,CStringArray> AryData;
	AryData.SetSize(nEndRow - nStartRow + 1);
	//AryData.RemoveAll();

	AryData.ElementAt(0).RemoveAll();
	for( i = nStartColumn, j = 0; i < nEndColumn; i++)
	{
		pListCtrl->GetColumn(i, &lv);
		AryData.ElementAt(0).Add(lv.pszText);
	}

	// ��ȡ��������;
	int nRet;
	CString str;
	int nCurRow = 1, nCurColumn;
	for ( i = nStartRow; i < nEndRow; i++, nCurRow++ )
	{
		nCurColumn = 0;
		AryData.ElementAt(nCurRow).RemoveAll();
		for ( j = nStartColumn; j < nEndColumn; j++)
		{
			AryData.ElementAt(nCurRow).Add(pListCtrl->GetItemText(i, j));
		}
	}

	// ���������л����ļ���;
	CMemFile Mef;
	CArchive ar(&Mef, CArchive::store);
	for ( i = 0; i < AryData.GetSize(); i++ )
	{
		AryData.ElementAt(i).Serialize(ar);
	}
	ar.Close();

	DWORD fLength = Mef.GetLength();
	PBYTE pData = Mef.Detach();

	CFile fb;
	str.Format(_T("%s.dat"), lpExclePath);
	if (fb.Open(str, CFile::modeCreate|CFile::modeWrite))
	{
		DWORD dwArySize = nEndRow - nStartRow + 1;
		fb.Write(&dwArySize, sizeof(DWORD));
		fb.Write(pData,fLength);			// ���������;
		DWORD dwFlag = 889900;
		fb.Write(&dwFlag,sizeof(DWORD));	// �������;
		fb.Close();
	}

	return TRUE;
}

TCHAR* GetGuidString()
{
	GUID guid;
	static TCHAR szBuf[64] = {0};
	memset(szBuf, 0, 64*sizeof(TCHAR));
	CoInitialize(NULL);
	if (S_OK == ::CoCreateGuid(&guid))
	{
		sprintf(szBuf, _T("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"),
			guid.Data1,
			guid.Data2,
			guid.Data3,
			guid.Data4[0], 
			guid.Data4[1],
			guid.Data4[2], 
			guid.Data4[3],
			guid.Data4[4], 
			guid.Data4[5],
			guid.Data4[6], 
			guid.Data4[7]
		);
	}
	CoUninitialize();

	return szBuf;
}