ExpandPackage.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // ExpandPackage.cpp : Defines the entry point for the DLL application.
  2. //
  3. #include "stdafx.h"
  4. #include"Package.h"
  5. #include<string>
  6. #include<vector>
  7. using namespace std;
  8. using namespace PackageCQ;
  9. DataSource AddDataSource(vector<Package * > PackArray)
  10. {
  11. if(PackArray.size()   >0 )
  12. {
  13. DataSource ResultSource = PackArray[0]->GetDataSource()  ;
  14. int PackCount = PackArray.size();
  15. for(int i=1;i<PackCount;i++)
  16. {
  17. ResultSource = ResultSource + PackArray[i]->GetDataSource();
  18. }
  19. return ResultSource;
  20. }
  21. else
  22. {
  23. throw exception ("no source to add");
  24. }
  25. }
  26. void CreatePackFile(const char *FileName ,DataSource& Source)
  27. {
  28. Package  * Package3 = new Package(Source,FileName);
  29. delete Package3;
  30.  
  31. }
  32. void FreePackArray(vector<Package * >& PackArray)
  33. {
  34. for(int i = 0; i < PackArray.size() ; i++)
  35. {
  36. if (PackArray[i])
  37. {
  38. delete PackArray[i];
  39. }
  40. }
  41. PackArray.clear();
  42. }
  43. void ConstructionPackArray(vector<Package*>& PackArray,int Count,char * FileName[])
  44. {
  45. // cout << "包文件采集:"<<endl;
  46. for (int j=0;j<Count;j++)
  47. {
  48. Package  * PackFile = new Package(FileName[j]);
  49. // cout <<"包文件"<< j<<":"<< FileName[j]<<endl;
  50. PackArray.push_back (PackFile); 
  51. }
  52. // cout << endl;
  53. }
  54. void DisplayErrorInfo(string& ErrorInfo)
  55. {
  56. LPVOID lpMsgBuf;
  57. FormatMessage( 
  58. FORMAT_MESSAGE_ALLOCATE_BUFFER | 
  59. FORMAT_MESSAGE_FROM_SYSTEM | 
  60. FORMAT_MESSAGE_IGNORE_INSERTS,
  61. NULL,
  62. GetLastError(),
  63. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  64. (LPTSTR) &lpMsgBuf,
  65. 0,
  66. NULL 
  67. );
  68. // Process any inserts in lpMsgBuf.
  69. // ...
  70. // Display the string.
  71. MessageBox( NULL, ErrorInfo.c_str(),(LPCTSTR)lpMsgBuf , MB_OK |MB_ICONWARNING );
  72. // Fee the buffer.
  73. LocalFree( lpMsgBuf );
  74. }
  75. void  ReplaceAFileToOtherFile(const char * SourceFileName,char * DestFileName)
  76. {
  77. if(!DeleteFile(DestFileName))
  78. {
  79. string ErrorInfo = string("DeleteFile(") +  string(DestFileName)+string(")");
  80. DisplayErrorInfo(ErrorInfo);
  81. throw exception("error when delete old File" );
  82. }
  83. if(!MoveFile(SourceFileName,DestFileName))
  84. {
  85. string ErrorInfo = string("MoveFile(") +  string(SourceFileName)+string(",") + string(DestFileName) + string(")");
  86. DisplayErrorInfo(ErrorInfo);
  87. throw exception("error when rename file");
  88. }
  89. }
  90. string GetCurrentTempFileName()
  91. {
  92. char DirectoryName [MAX_PATH];
  93. if (GetTempPath(MAX_PATH,DirectoryName) == 0)
  94. {
  95. string ErrorInfo = "GetTempPath(" +string("MAX_PATH") +",DirectoryName)";
  96. DisplayErrorInfo(ErrorInfo);
  97. throw exception("Error when Get Temp Path");
  98. }
  99. char TempFileName[MAX_PATH];
  100. if(!GetTempFileName(DirectoryName,"CQ",0,TempFileName))
  101. {
  102. string ErrorInfo = "GetTempFileName('" +string(DirectoryName) +"','CQ',0,TempFileName)";
  103. DisplayErrorInfo(ErrorInfo);
  104.         throw exception("Error when Get Temp File Name ");
  105. }
  106. return TempFileName;
  107. }
  108. __declspec(dllexport) int __stdcall CombinatPackage(char * SourceFileName ,char * DescFileName)
  109. {
  110. vector<Package *> PackageArray;
  111. int nRet;
  112. try
  113. {
  114. char * File[2];
  115. File[0] = DescFileName;
  116. File[1] = SourceFileName;
  117. DataSource ResultSource;
  118. ConstructionPackArray(PackageArray, 2, File);
  119. ResultSource = AddDataSource(PackageArray);
  120. // cout << "数据源样品采集完成:"<<endl<<endl;
  121. //DisplaySource(ResultSource);
  122. // cout << "开始构造新样品:"<<argv[argc -1 ]<<endl<<endl;
  123. string TempFileFullName = GetCurrentTempFileName();
  124. CreatePackFile(TempFileFullName.c_str() ,ResultSource);
  125. //cout << "新样品构造完成"<<endl<<endl;
  126. FreePackArray(PackageArray);
  127. ReplaceAFileToOtherFile(TempFileFullName.c_str(),DescFileName);
  128. nRet = 1; 
  129. }
  130. catch(exception& Error)
  131. {
  132. OutputDebugString(Error.what() );
  133. FreePackArray(PackageArray);
  134. nRet = 0;
  135. }
  136. return nRet;
  137. }
  138. BOOL APIENTRY DllMain( HANDLE hModule, 
  139.                        DWORD  ul_reason_for_call, 
  140.                        LPVOID lpReserved
  141.  )
  142. {
  143.     return TRUE;
  144. }