// Global.h  : Ӧ�ó����ȫ�ֱ���������ͷ�ļ�
//

// ���������� 2014��9��25��, 09:55

#ifndef __LYFZ_SERVERINFO_HEADER__
#define __LYFZ_SERVERINFO_HEADER__

#include <vector>
#include <string>
#include <shlwapi.h>
#include ".\\includes\\gdiplus.h"   ////���޸�Ϊ���ͷ�ļ�·��
using namespace Gdiplus;
#pragma comment(lib, ".\\lib\\gdiplus.lib") ////���޸�Ϊ���.lib�ļ�·��
#include "lyfzLoadLibrary.h"

#define USE_KERNEL_DLL		// 2015-12-10

#ifdef USE_KERNEL_DLL
#include "IMGBasetype.h"
#include "StructDef.h"
#include "filekernel.h"
#include "Imgkernel.h"
#endif

#pragma once

#define JEFF_TEST_ON  1		// ����Jeff���˲��Ա�ʶ;
#define JEFF_TEST_OFF 0		// ����Jeff���˲��Ա�ʶ;
#define JEFF_DELETE_ON  0	// ����Jeff����ָʾij�δ����ʶΪɾ��״̬;	
#define JEFF_DELETE_OFF 1	// ����Jeff���˽��ij�δ����ɾ��״̬;

#define LYFZVERSION			_T("Version 1.0")

#define USE_SHARE_FLORD 1	// ʹ�ö༶����Ŀ¼; 2015-07-16

#define INSERT_SENDREG			_T("insert into sendreg([msgtype],[phones],[content],[timestamp],[msgcount],[status],[issended],[isautosend],[ren]) values ('%s','%s','%s','%s','%s','%s','%s','%s','%s')")
#define INSERT_SENDREG_MC		_T("insert into sendreg([msgtype],[phones],[content],[timestamp],[msgcount],[status],[issended],[isautosend],[ren]) values ('%s','%s','%s','%s','%d','%s','%s','%s','%s')")
#define INSERT_SENDREGDELAY		_T("insert into sendregdelay([msgtype],[phones],[content],[timestamp],[msgcount],[status],[issended],[isautosend],[ren]) values ('%s','%s','%s','%s','%s','%s','%s','%s','%s')")
#define INSERT_SENDREG_OLD		_T("insert into sendreg([phones],[content],[timestamp],[msgcount],[status],[issended],[isautosend],[ren]) values ('%s','%s','%s','%s','%s','%s','%s','%s')")
#define INSERT_SENDREG2			_T("insert into [sendreg2]([phones],[content],[price],[yytime],[client],[type],[date],[ren]) values ('%s','%s','%s','%s','%s','%s','%s','%s')")
#define INSERT_INCREMENT		_T("INSERT INTO [IncrementalBackup]([isbackup],[branchid],[opttime],[order],[photoType],[content],[userid],[username],[baktime])VALUES (%d,'%s','%s','%s',%d,'%s','%s','%s',NULL)")

#define GET_XPIX(x)			( x >> 16)				// ��16λ;
#define GET_YPIX(y)			(y & 0x0000ffff)		// ��16λ;
#define SET_PIX(x,y)		(( x << 16) | y)		// �ߵͺϲ�;

#define USE_SEP_VEB             // �Ƿ�ʹ�ü��߷ָ���;
#define SEPC_VEB _T('|')		// �ָ���,����Separator Character,A vertical bar;
#define SEPC_CMA _T(',')		// �ָ���,����Separator Character,Comma;
#define SEPC_SCN _T(';')		// �ָ���,�ֺ�Separator String,Semicolon

#define SEPS_VEB _T("|")		// �ָ���,����Separator String,A vertical bar;
#define SEPS_CMA _T(",")		// �ָ���,����Separator String,Comma;
#define SEPS_SCN _T(";")		// �ָ���,�ֺ�Separator String,SemicSemicolon

///ɾ��һ������ָ��ĺ궨��
#ifndef DELETEA
#define DELETEA(ptr) \
if(NULL != ptr) \
{ \
	delete[] ptr; \
	ptr = NULL; \
}
#endif

// ɾ��һ��ָ��ĺ궨��;
#ifndef FREEP
#define FREEP(ptr)		\
if(NULL != ptr)		\
{					\
	free(ptr) ;		\
	ptr = NULL;		\
}
#endif

//ɾ��һ��ָ��ĺ궨��;
#ifndef DELETEP
#define DELETEP(ptr)	\
if(NULL != (ptr))	\
{					\
	delete (ptr);	\
	(ptr) = NULL;	\
}
#endif

// ɾ��һ��GDI����ĺ궨��;
#define DELETEOBJECT(ptr)	\
if(NULL != (ptr))		\
{						\
	::DeleteObject (ptr);\
	(ptr) = NULL;		\
}

// Destroyһ��Window;
#define DESTROYWINDOW(hWnd)	\
if (IsWindow(hWnd))		\
{ \
	DestroyWindow(hWnd); \
}

enum	// �����;
{
	ZoomNull = 0,		// ������;
	ZoomIn = 1,			// ��С;
	ZoomOut = 2			// �Ŵ�;
};

//////////////////////////////////////////////////////////////////////////
extern BOOL g_bRemote; // ���򿪹���Ŀ¼ʧ��ʱ,�������ΪTRUE;

extern HINSTANCE g_Instance;
#define MSG_KERNEL_CALLBACK WM_USER + 1001
#define MSG_KERNEL_SENDMSG	WM_USER + 1002
typedef void (CALLBACK *IMGImportMergeCallback)( IN LPCTSTR lpStrBranchId, IN LPCTSTR lpStrOrderNum, IN CONST INT& dwImgType, IN CONST DWORD& dwImgNum, IN LPCTSTR lpStrImgs, IN LPCTSTR lpStrImgExt );
//extern KERNELCALLBACK *g_kernelCallback; 
//////////////////////////////////////////////////////////////////////////

// Jeff add 2014-12-11 �ָ���;
#define SEPARATOR _T("|")

#ifdef USE_KERNEL_DLL
extern TblVersion g_ThisShopVersion;	// ����������Ϣ;
#endif

typedef struct tagresdata2		// ��;?
{
	BOOL bHasBk;				// 
	int  nPicCount;				// 
	int  nPicCount2;			// 
	DWORD nPicBmpCount[50];		// Ϊ������ħ��50?
	CRect rect[50];				// Ϊ������ħ��50?
}RESDATA2;

typedef struct tagUSER
{
	int bLongin;			// �Ƿ��½;
	CString  name;			// �û���;
	CString  rights;		// Ȩ��1;
	CString  rights2;		// Ȩ��2;
	CString  bm;			// �û�����;
	CString account;		// �û��˺�;
	CString m_discount;		// Ա���ۿ�?
	CString m_discount2;	// Ա���ۿ�2?
	CString level;			// �ļ���Ȩ�޵ȼ�?
}USER;


// �ͻ����ļ�dbconfig.dat;
typedef struct
{
	BOOL bsql;
	int  server[50];
	int  user[50];
	int  psw[50];
}DBSAVE;

typedef struct
{
	BYTE bsql;
	BYTE tabcount;
	BYTE code[100];
	DWORD count[100];
	DWORD length[100];
}SENDHEAD;

// 2015-10-10
typedef struct _STSceneryInfo_
{
	BOOL	bSelected;					// ��ѡ��;
	CString strScenery;					// ����;
	CString strStatus;					// �����������ϵ����״̬;
	CString strTime;					// ����ʱ��;
	CString strLensman;					// ��Ӱʦ;
	CString strLensmanAssistant;		// ��Ӱʦ����;
	CString strBootDivision;			// ����ʦ;
	CString strBootDivisionAssistant;	// ����ʦ;

	_STSceneryInfo_()
	{
		bSelected = FALSE;
	}
}STSceneryInfo;

typedef struct _STOrederInfo_
{
	CString strBranchId;		// ����;
	CString strOrderNumber;		// ������;
	CString strStatus;			// ����������״̬;
	CString strImageNumber;		// ��Ƭ���;
	CString strName1;			// �˿�1;
	CString strName2;			// �˿�2;
	CString strClerk;			// �ӵ���;
	CString strPhone;			// �ֻ�;
	CString strTelPhone;		// ����;
	std::vector<STSceneryInfo> vtOrderScenery;	// ��������;
}STOrederInfo;

// Import or Export Image Typed
typedef enum
{
	ImageType_Original = 1,
	ImageType_Early = 2,
	ImageType_Further = 3,
	ImageType_Design = 4
}IE_IMAGETYPE;

extern WORD g_arrFileVersion[4];

extern TCHAR g_szLoginUser[MAX_PATH];			// ��ǰ�����ĵ�½�û���;
extern TCHAR g_szLoginPsw[MAX_PATH];			// ��ǰ�����ĵ�½����;

extern TCHAR g_szModulePath[MAX_PATH];			// ����Ŀ¼;
extern TCHAR g_szModuleFileName[MAX_PATH];		// ����ȫ����;
extern TCHAR g_szConnectString[MAX_PATH];		// DB���Ӵ�;

extern TCHAR g_szHostComputerIP[MAX_PATH];		// ��������;
extern DWORD g_dwCSPort;						// ����ͨ��TCP�˿�;

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

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

extern TCHAR g_szShareHost[MAX_PATH];
extern TCHAR g_szOriginalFolder[MAX_PATH];
extern TCHAR g_szOriginalBkFolder[MAX_PATH];
extern TCHAR g_szEarlyRepairFolder[MAX_PATH];
extern TCHAR g_szEarlyRepairBkFolder[MAX_PATH];
extern TCHAR g_szFurtherRepairFolder[MAX_PATH];
extern TCHAR g_szFurtherRepairBkFolder[MAX_PATH];
extern TCHAR g_szDesignFolder[MAX_PATH];
extern TCHAR g_szDesignBkFolder[MAX_PATH];
extern TCHAR g_szTelRecordingFolder[MAX_PATH];
extern TCHAR g_szFullDressImageFolder[MAX_PATH];
extern BOOL	 g_bRunOnCorruptdb;				// ���𻵵����ݿ�������;

extern BOOL g_bSoftWareReg;
extern CString g_strDogMainInfo;
extern CString g_strMain;
extern CStringArray g_strArrayOfBranchName;
extern CStringArray g_strArrayOfBranchName2;
extern CStringArray g_strArrayOfBranchIPAdress;
extern CStringArray g_strArrayOfBranchDogMainInfo;
extern unsigned int g_nCountOfAllowToConn;
extern DWORD g_nLeng;
extern BYTE *g_pData;
extern DWORD g_nLeng2;
extern BYTE *g_pData2;
extern SENDHEAD g_sendhead;


extern BOOL g_bRedSkin;
extern COLORREF g_gridcol1;
extern COLORREF g_gridcol2;
extern COLORREF g_bkcol;

extern CString g_date;	// ���ӷ����ʱ�ɷ���˲�����CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S");
extern CString g_title;
extern CArray<CStringArray, CStringArray>g_userarray;
extern CArray<CStringArray, CStringArray>g_cominfoarray;
extern CArray<CStringArray, CStringArray>g_cominfoarraylocal;
extern CArray<DWORD, DWORD>g_lengarray;
extern CArray<DWORD, DWORD>g_btnlengarray;
extern CArray<BYTE*, BYTE*>g_pointerarray;
extern CBrush g_editbkbrush;
extern DWORD g_btnleng[8];
extern int   g_btnlengpos;
extern int  g_nYearpos;			// ��[historydb]����¼����,��g_hisyeararrayԪ��λ��;
extern CString g_branchname;	// ���ͻ���ʹ�õ���dbconfig.dat��ķ���˵�ַʱ,g_branchname=""; ��ҵ��ͻ������������ֵ�������ʱ,g_branchnameֵΪ���ӵķֵ���;
extern CString g_branchip;		// ��g_branchname����,ֻ����ҵ��ʱ�ɿͻ��˲˵�ѡ�����ӷֵ�������ʱ,���ip�Ż���ֵ,����Ϊ��;
extern CString g_branchip2;
extern BOOL g_bBranchModify;


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


extern CDatabase g_db;
extern DWORD g_ncount;
extern CFont g_titlefont;
extern DWORD g_nSendCode;
extern BOOL g_bSendOK;

extern CArray<CStringArray, CStringArray>g_hisyeararray;	// ��[historydb]���;
extern CArray<CStringArray, CStringArray>g_brancharray;
extern CArray<CStringArray, CStringArray>g_oldclientarray;
extern CArray<CStringArray, CStringArray>g_List1array;

extern BOOL g_bNoConnDlg;
extern BOOL g_bInSkin;
extern int g_conntype;
extern BOOL g_bGenBranchData;
extern CString g_temp;
extern BOOL g_bSortAscending;
extern CFont g_listctrlfont;
extern float g_fscalex;
extern float g_fscaley;
extern int g_screenwid;			// �����
extern int g_screenhei;			// �����
extern float g_WidthScale;			//	���̶�Jeff
extern float g_HeightScale;			//	�߿̶�Jeff
extern RESDATA2 g_resdata2;
extern BOOL g_bAlphaWnd;
extern BYTE g_bNeedDrawParent;
extern BOOL g_bAllBranch;			// �Ƿ����������;
extern CString g_domain;			// ��ֵΪ�̶�ֵ,�ǿͻ���ʹ��dbconfig.dat�еķ���˵�ַ���Ӻ�,�ɷ���˷��ص�����ֵ;��ҵ��ͻ������������ֵ�������ʱ,��ֵ���ı�;
extern CString g_sInfo;
extern int g_ncot;
extern int g_conpos;
extern int g_nAutoShowStaffAchievement;
extern BOOL g_bShowBar;
extern int g_bookingtype;
extern BOOL g_bNoLoginLia;
extern BOOL g_bConnLYFZ;
extern BOOL g_bSendLYFZ;
extern int g_ntimeout;
extern float g_WidthScale;
extern float g_HeightScale;
extern int g_dx;
extern int g_dy;
extern BOOL g_bNeedCoon;
extern float g_WidthScale2 ;
extern float g_HeightScale2 ;
extern CStringArray g_menubranchname;

#if USE_SHARE_FLORD
extern CArray<CStringArray, CStringArray> g_aryOfSharePathInfo;		// NetShareInfo����¼;
#endif

// ʹ��ϵͳ��������;
extern BOOL g_bOriginal;
// �ͻ���guid�ַ�����־��,��Ϊÿ���ͻ��˵�Ψһidֵ;
extern TCHAR g_szGuidMark[64];
// ����̨���;
extern BOOL g_bStdOut;
// N8����·��;
extern TCHAR g_szN8Path[MAX_PATH];
// HostInfo.ini��·��;
extern TCHAR g_szIniPath[MAX_PATH];
// Neѡ�������IP��ַ;
extern TCHAR g_szN8SvIP[MAX_PATH];
// �Ƿ�������ѡ����;
extern BOOL g_bEnableClound;
// �Ƿ񵼳�������λͼ;
extern BOOL g_bExportBarCode;
// �������������;
extern INT g_nDrawerCount;

//-----------------------------------------------------------------------------------------------------------------
extern BOOL LoadImageFromFile(IN Image** pImg, IN CString strPath);
extern BOOL LoadImageFromBuf(IN Image** pImg, IN CString strPath);
extern BOOL LoadImageFromBuf(IN Image** pImg, IN BYTE* pBuffer, IN CONST DWORD& nBufLen);

// ʹ��Image�汾,���Բ�ʹ��Bitmap�汾,��ΪBitmap�̳���Image��
extern BOOL LoadImageFromFile(IN Bitmap** pImg, IN CString strPath);
extern BOOL LoadImageFromBuf(IN Bitmap** pImg, IN CString strPath);
extern BOOL LoadImageFromBuf(IN Bitmap** pImg, IN BYTE* pBuffer, IN CONST DWORD& nBufLen);

extern void SaveImageToFile(Image *img, CString path);
extern void SaveImageToFile2(Image *img, CString path, ULONG quality);
extern void LoadImageFromRes(Image **img, LPCTSTR lpszResourceName, LPCTSTR ResourceType);
extern int GetOrientation(Image *image);
extern int GetEncoderClsid(const WCHAR* format, CLSID* pClsid);

extern void IsWaiter2(CString id, CString name, CArray<CStringArray, CStringArray>*waiterarray, BOOL &bWait1, BOOL &bWait2, float &fscale1, float &fscale2, BOOL bCheckDate, CString date1, CString date2);
extern void IsWaiter3(CString id, CString name, CArray<CStringArray, CStringArray>*waiterarray, BOOL &bWait1, BOOL &bWait2, float &fscale1, float &fscale2);
extern CString GetNameFromDomain(CString domain);
extern void GetSavePath(CString &path);
extern CString GetW(CString str);
extern CString GetK(CString str);
extern CString GetB(CString str);
extern CString GetS(CString str);
extern CString GetG(CString str);
extern CString GetHMoney(CString str);
extern int GetYearPos(int year);// ���Ҳ�������ʷ���ݿ��򷵻�-1;
extern void FillLength(CString &str, int length);
extern BOOL myisdigit(CString str);
extern BOOL IsHasRightsnew2(int pos, CString rights);
extern CString GetIP(CString branch);
extern CString GetBranchIPbyId( IN LPCTSTR lpStrBranchId );
extern CString GetBranchNamebyId( IN LPCTSTR lpStrBranchId );
extern void WriteTitle(CString str);
extern BOOL IsHanZi(CString str);
extern int GetType(CString str);
extern CString FilterBZ(CString &bz);
extern BOOL GIsHalfHZ(const   CString   &str);
extern void RectFitDes(int width, int height, CRect &rc);
extern bool  CheckFolderFileExist(CString &strPath);
extern int GetLengthEx(CString str);
extern BOOL IsHasRights(int pos);	// ��������;
extern BOOL IsHasRights2(int pos);	// ��������;
extern BOOL IsHasRightsnew(int pos);
extern BOOL IsHasRights2new(int pos);
extern void FirstLetter(int nCode, CString& strLetter);
extern void GetFirstLetter(CString strName, CString& strFirstLetter);

extern CString newGUID();
extern void ConvertToPrice(CString &str);
extern DWORD FindAppProcessID(CString path);
extern BOOL isInnerIP(DWORD a_ip);
extern void MyGetIPByName(CString &name);
extern void MyGetIPByName2(CString &name);
extern CTime GetTmFromStr(CString date);
extern int IsExistFolder(char *szPath);
extern CString GetBranchPhotoPath(CString branch);
extern CString GetDomainFromBranch(CString branch);
extern BOOL CheckDateOK2(CString str);
extern BOOL CheckBadWords(CString str, BOOL bMsg = 0);
//extern BOOL CheckBadWords2(CString str, BOOL bMsg = 0);
extern int CheckPhoneType(CString &phoneno);
extern BOOL CheckDateOK(IN CString &str,IN CONST BOOL &bLunanr = FALSE);
extern int FindArray(CStringArray *pArray, const CString &Str);
extern int GetSysIniInfo(const char *szPath = NULL, const char *szIniName = NULL);
extern BOOL WaitWithMessageLoop(HANDLE hEvent, int nTimeout);
extern BOOL IsFileExist(const TCHAR *pFileFullName);
extern void DeleteDirectory(CString strDir);
extern BOOL RegisterOcx(LPCTSTR ocxfile);
extern BOOL GetDebugPriv();
extern bool GetFileVersion(HMODULE hModule, WORD *pBuffer);
extern bool GetProductVersion(IN HMODULE hModule, OUT WORD *pBuffer);
extern BOOL CheckInternalIPV4(const unsigned int &ip_addr);
extern BOOL IsValidIPV4(const TCHAR *szIP);
extern int GetHostAllOfIP(const TCHAR *pHostName, std::vector<std::string> &vtHostIPV4);

extern void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString,
	int datapos = -1);

extern void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	int datapos = -1);

extern void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	int datapos = -1);

extern void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	int datapos = -1);

extern void DataToArray(
	CArray<CStringArray, CStringArray>*pArrayOfString1,
	CArray<CStringArray, CStringArray>*pArrayOfString2,
	CArray<CStringArray, CStringArray>*pArrayOfString3,
	CArray<CStringArray, CStringArray>*pArrayOfString4,
	CArray<CStringArray, CStringArray>*pArrayOfString5,
	int datapos = -1);

extern 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 = -1);

extern 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 = -1);

extern 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 = -1);

extern 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 = -1);

extern inline int MultiByteLengthConvertToWideCharLength(/*LPCSTR*/LPCCH lpString);
extern void lyfzImportImage(LPCTSTR lpDestDirectory, CStringArray &strArrayOfImage, const BOOL &bFailIfExists = TRUE);
extern BOOL lyfzCopyFileEx(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, const BOOL &bFailIfExists = TRUE);
extern BOOL lyfzCreateDirectory(LPCTSTR lpDestDirectory);
extern void lyfzSplitpath(const char *path, char *drive, char *dir, const int &nTimes);
extern void ShowSystemErrorInfo(CString &strDescription, const DWORD &dwError);
extern void WriteTextLog(const TCHAR *format, ...);
extern BOOL IsDirectoryLegitimate(const CString &strDirectory);
extern void ExportCutImageToFile(LPCCH lpOrderCutImageInfo, LPCCH lpSrcDirectory, LPCCH lpSaveDirectory);
extern BOOL AnalysisImagInfo(CStringArray &saSrcPhoto, LPCCH strSrcDirectory, LPCCH strSaveDirectory, CString &strImageInfo, CString &strImageName, CString &strCutScheme, CRect &rtCut);
extern int GetCountOfOrderFolderPhotoFile( const TCHAR *pOrderFolder,  CStringArray &StrPhotoArray);

extern VOID GetFileNameFromFullPath(CONST CString &strFullPath, CString &strRet);

extern  BOOL SaveImg2newfile(IN Image* pImg, IN CString strNewfile, IN ULONG uQuality);
extern  int ZoomImg(IN CRect &Imgrc, IN CONST DWORD &dwDisplayPix, OUT DWORD &dwZoomPix);
extern  int ZoomImg(IN CONST DWORD &dwImgPix, IN CONST DWORD &dwDisplayPix, OUT DWORD &dwZoomPix);
extern  BOOL ImgThumbnail(IN Image* pImg, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality);
extern  BOOL ImgThumbnail(IN LPCTSTR lpImgpath, IN CONST DWORD &dwDisplayPix, IN CString strNewfile, IN ULONG uQuality);

extern HMODULE g_hlyfzMicroShareDLL;
extern BOOL LoadMicroShareLibrary();
extern void FreeMicroShareLibrary();

typedef INT (WINAPI *lyfzCreateShare)(
	IN LPCTSTR lpShareAccount,					// ΢�����ĵ�¼�˺�;
	IN LPCTSTR lpAccountPsw,					// ΢�����ĵ�¼�˺�����;
	IN LPCTSTR lpRootDirectory,					// ��Ƭ����Ŀ¼;
	IN LPCTSTR lpBranchName,					// �ֵ�����;
	IN LPCTSTR lpOrderNumber,					// ������,�������ɶ�ά���ļ���;
	IN LPCTSTR lpScenery,						// ������;
	IN LPCTSTR lpSourceFilePath,				// Ҫ�������ļ���Ŀ¼;
	IN LPCTSTR lpCustomer1Name,					// ��������1 ;
	IN LPCTSTR lpCustomer2Name,					// ��������2 ;
	IN LPCTSTR lpMakeupArtist,					// ��ױʦ;
	OUT LPTSTR lpMicroAlbumID					// ����΢���ID;
	);

extern lyfzCreateShare g_lyfzCreateShare;

extern BOOL GetRemoteConfig();

extern BOOL OpenShareDirectory();

extern BOOL IsValidDate(LPCTSTR lpDate);

extern BOOL IsValidLunanrDate(LPCTSTR lpDate);
extern int IsExistNumInString(const char* str);

/*-----------------------------------��ȡӲ����Ϣ ģ�� begin--------------------------------------------*/
extern HMODULE g_hHDSerial;
extern BOOL LoadHDSerialLibrary();
extern void FreeHDSerialLibrary();

/*
GetSeiralNumberOrID("Win32_BaseBoard", "SerialNumber");			// ����
GetSeiralNumberOrID("Win32_Processor", "ProcessorID");			// CPU
GetSeiralNumberOrID("Win32_PhysicalMemory", "SerialNumber");	// �ڴ�
GetSeiralNumberOrID("Win32_DiskDrive", "PNPDeviceID");			// Ӳ��
*/
/************************************************************************/
/*	
	����: GetSeiralNumberOrID
	����: ��ȡ���кŻ�ID ͨ�� IWbemLocator �� IWbemServices ������ COM �ӿڷ��� WMI, ��ȡϵͳ��Ϣ
	����: 
		LPCTSTR lpszClass,					
		LPCTSTR lpszName
		CString& str					�������кŻ�ID
	����: 
	ע��: 1�ɹ�, 0ʧ��;
*/
/************************************************************************/
typedef INT (WINAPI *GetSeiralNumberOrID)(LPWSTR lpszClass, LPWSTR lpszName, LPWSTR str);

/************************************************************************/
/*	
	����: GetLocalMacAddr
	����: ��ȡ����mac��ַ
	����: 
		BYTE* pMac		����mac��ַ
	����: 
	ע��: 
*/
/************************************************************************/
typedef VOID (WINAPI *GetLocalMacAddr)(LPSTR pMac);

extern TCHAR			g_strCPUID[MAX_PATH];						//��ȡCPU ID
extern TCHAR			g_strMacAddr[MAX_PATH];					//mac��ַ
extern TCHAR			g_strHDNum[MAX_PATH];						//Ӳ��ID
extern TCHAR			g_strBIOSNum[MAX_PATH];					//����ID

extern GetSeiralNumberOrID g_GetSeiralNumberOrID;
extern GetLocalMacAddr g_GetLocalMacAdd;

/*-----------------------------------��ȡӲ����Ϣ ģ�� end--------------------------------------------*/

/*-----------------------------------DES���ܽ��� ģ�� begin--------------------------------------------*/
/************************************************************************/
/*	
	����: GetLocalMacAddr
	����: DES����
	����: 
		LPCSTR pPlaintext,				���ܵ�����
		LPCSTR pKey						��Կ
		LPSTR pCiphertext				���ؼ��ܺ������
	����: 
	ע��: 
*/
/************************************************************************/
typedef VOID (WINAPI *DESEncrypt)(IN LPCSTR pPlaintext, IN LPCSTR pKey, OUT LPSTR pCiphertext);

/************************************************************************/
/*	
	����: DESDecrypt
	����: DES����
	����: 
		LPCSTR pCiphertext,				Ҫ���ܵ�����
		LPCSTR pKey						��Կ
		LPSTR pPlaintext				���ؽ��ܺ������
	����: 
	ע��: 
*/
/************************************************************************/
typedef VOID (WINAPI *DESDecrypt)(IN LPCSTR pCiphertext, IN LPCSTR pKey, OUT LPSTR pPlaintext);

extern DESEncrypt g_DESEncrypt;
extern DESDecrypt g_DESDecrypt;
/*-----------------------------------DES���ܽ��� ģ�� end--------------------------------------------*/

#ifdef USE_KERNEL_DLL
typedef ImgEnvInterface* (*CREATEIMGPROCESS)( );
extern ImgEnvInterface* CreateIMGProcess( );
extern ImgEnvInterface *g_pIMGProcess;
extern BOOL GetOrderpathByImgType(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, OUT CStringArray& AryOrderpath);
extern BOOL GetOrderpathByOrderNum(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, OUT CStringArray& AryOrderpath);
extern BOOL GetScenerypathByOrderNum(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpScenery, OUT CStringArray& AryOrderpath);
extern BOOL GetOrderImgpath(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, OUT CStringArray& AryImgpath);
extern 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 );
extern BOOL GetSceneryImgpath(IN CONST INT& nImgType, IN LPCTSTR lpBranchId, IN LPCTSTR lpOrderNum, IN LPCTSTR lpScenery, OUT CStringArray& AryImgpath);
extern 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 );
#endif

extern int IsDigitString(IN CONST CString& str);
extern BOOL Import2Excle(IN CListCtrl *pListCtrl, IN LPCTSTR lpExclePath, IN CONST int& nStartColumn, IN CONST int& nStartRow, IN int nEndColumn = -1, IN int nEndRow = -1) ;	// ���뵽excle;
extern BOOL Import2Xls(IN CListCtrl *pListCtrl, IN LPCTSTR lpExclePath, IN CONST int& nStartColumn, IN CONST int& nStartRow, IN int nEndColumn = -1, IN int nEndRow = -1) ;	// ���뵽excle;
extern TCHAR* GetGuidString();
#endif // endof Global.h