#ifndef __LIVEUPDATE_DEFINE_H__ #define __LIVEUPDATE_DEFINE_H__ typedef struct DownloadInfo { int nSpec; // 专业(枚举值eTGSpeciality) TCHAR szDownloadURL[MAX_PATH]; // 下载的地址,如:http://down.lltskb.com/lulutong.zip或ftp://192.168.0.2/TangentPackage/arxdev.pdf TCHAR szSavePath[MAX_PATH]; // 下载后本地的保存路径,如"E:\\" TCHAR szSaveOnlyFileName[MAX_PATH]; // 下载后保存的文件名,默认是下载地址最后的文件名 TCHAR szUsername[MAX_PATH]; // 远程登录时的用户名 TCHAR szPassword[MAX_PATH]; // 远程登录时的密码 TCHAR szTchIniPath[MAX_PATH]; // 专业软件的tch.ini的路径 BOOL bForceDownload; // 是否强制重新下载,FALSE为断点续传,TRUE为重新下载 BOOL bCloseDownloadWnd; // 下载完成后关闭默认的下载窗口 BOOL bShowDownloadWnd; // 更新过程中是否显示下载窗口 int nThreadCount; // 下载的线程数,默认值为4,最多支持16 TCHAR szLogPath[MAX_PATH]; // 下载日志文件的全路径,缺省为系统临时目录,文件可以不存在,文件夹必须存在 BOOL bCallComOnEnd; // 下载完成之后是否调用COM BOOL bUseDefaultCLSID; // 下载完成后调用的是否是默认的COM,仅在bCallComOnEnd为TRUE时有效 CLSID rclsid; // 下载完成后调用COM的CLSID,仅在bUseDefaultCLSID为FALSE时有效 }DOWNLOADINFO,*PDownloadInfo; enum eTGSpeciality { eTArch = 1, // 建筑 eTASD = 2, // 结构 eTElec = 3, // 电气 eTHvac = 6, // 暖通 eTSun = 7, // 日照 eTWT = 8, // 给排水 eTCAD = 10, // 蚂蚁 eTLEA = 11, // 光污染 eTBEC = 12, // 节能 eTSED = 15, // 太阳能 }; BOOL GetDownloadParam(PDownloadInfo pDI, CString &sParam, CString &sCLSID) { sParam.Empty(); if (pDI == NULL) { return FALSE; } sParam.Format(_T("%d\n%s\n%s\n%s\n%s\n%s\n%s\n%d\n%d\n%d\n%d\n%s\n%d\n%d\n"), pDI->nSpec, pDI->szDownloadURL, pDI->szSavePath, pDI->szSaveOnlyFileName, pDI->szUsername, pDI->szPassword, pDI->szTchIniPath, pDI->bForceDownload, pDI->bCloseDownloadWnd, pDI->bShowDownloadWnd, pDI->nThreadCount, pDI->szLogPath, pDI->bCallComOnEnd, pDI->bUseDefaultCLSID ); BSTR bstrCLSID; ::StringFromCLSID(pDI->rclsid, &bstrCLSID); sCLSID.Empty(); sCLSID = bstrCLSID; CoTaskMemFree(bstrCLSID); return TRUE; } BOOL ParseDownloadParam(PDownloadInfo pDI, const CString &sParam, const CString &sCLSID) { if (pDI == NULL) { return FALSE; } // 不使用_stscanf是因为结构体中变量值可能为空,_stscanf失败 CString sValue = _T(""); AfxExtractSubString(sValue, sParam, 0, _T('\n')); pDI->nSpec = _ttoi(sValue); AfxExtractSubString(sValue, sParam, 1, _T('\n')); _tcscpy(pDI->szDownloadURL, sValue); AfxExtractSubString(sValue, sParam, 2, _T('\n')); _tcscpy(pDI->szSavePath, sValue); AfxExtractSubString(sValue, sParam, 3, _T('\n')); _tcscpy(pDI->szSaveOnlyFileName, sValue); AfxExtractSubString(sValue, sParam, 4, _T('\n')); _tcscpy(pDI->szUsername, sValue); AfxExtractSubString(sValue, sParam, 5, _T('\n')); _tcscpy(pDI->szPassword, sValue); AfxExtractSubString(sValue, sParam, 6, _T('\n')); _tcscpy(pDI->szTchIniPath, sValue); AfxExtractSubString(sValue, sParam, 7, _T('\n')); pDI->bForceDownload = _ttoi(sValue); AfxExtractSubString(sValue, sParam, 8, _T('\n')); pDI->bCloseDownloadWnd = _ttoi(sValue); AfxExtractSubString(sValue, sParam, 9, _T('\n')); pDI->bShowDownloadWnd = _ttoi(sValue); AfxExtractSubString(sValue, sParam, 10, _T('\n')); pDI->nThreadCount = _ttoi(sValue); AfxExtractSubString(sValue, sParam, 11, _T('\n')); _tcscpy(pDI->szLogPath, sValue); AfxExtractSubString(sValue, sParam, 12, _T('\n')); pDI->bCallComOnEnd = _ttoi(sValue); AfxExtractSubString(sValue, sParam, 13, _T('\n')); pDI->bUseDefaultCLSID = _ttoi(sValue); BSTR bstrCLSID = sCLSID.AllocSysString(); ::CLSIDFromString(bstrCLSID, &pDI->rclsid); SysFreeString(bstrCLSID); return TRUE; } #endif