MsDevWizardAw.cpp
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:9k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // MsDevWizardaw.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MsDevWizard.h"
  5. #include "MsDevWizardaw.h"
  6. #include "chooser.h"
  7. #include <comdef.h>
  8. #include <atlbase.h>
  9. #include <fstream.h>
  10. #include <string.h>
  11. #ifdef _PSEUDO_DEBUG
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. // This is called immediately after the custom AppWizard is loaded.  Initialize
  16. //  the state of the custom AppWizard here.
  17. void CMsDevWizardAppWiz::InitCustomAppWiz()
  18. {
  19. // Create a new dialog chooser; CDialogChooser's constructor initializes
  20. //  its internal array with pointers to the steps.
  21. m_pChooser = new CDialogChooser;
  22. // Set the maximum number of steps.
  23. SetNumberOfSteps(LAST_DLG);
  24. // TODO: Add any other custom AppWizard-wide initialization here.
  25. }
  26. static void MakeCustomBuild(const char * config, ostream & out)
  27. {
  28.   out << "IF  "$(CFG)" == "" << MsDevWizardaw.m_Dictionary["Root"] << " - Win32 " << config << ""n"
  29.          "n"
  30.          "# Begin Custom Build - Building event log resources.n"
  31.          "InputDir=.n"
  32.          "IntDir=.\Releasen"
  33.          "TargetName=" << MsDevWizardaw.m_Dictionary["Root"] << "n"
  34.          "InputPath=.\messages.mcn"
  35.          "InputName=messagesn"
  36.          "n"
  37.          "BuildCmds= \n"
  38.  "tmc -h $(IntDir) -r $(IntDir) $(InputPath) \n"
  39.  "techo 1 ICON $(InputDir)\$(TargetName).ico >> $(IntDir)\$(InputName).rc \n";
  40.   if (MsDevWizardaw.m_has_http)
  41.     out << "techo RCINCLUDE $(InputDir)\custom.cxx >> $(IntDir)\$(InputName).rc \n";
  42.   out << "trc -i$(IntDir) -fo$(IntDir)\$(InputName).res $(IntDir)\$(InputName).rc \n"
  43.          "n"
  44.          "n"
  45.          ""$(IntDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  46.          "t$(BuildCmds)n"
  47.          "n"
  48.          ""$(IntDir)\$(InputName).rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  49.          "t$(BuildCmds)n"
  50.          "n"
  51.          ""$(IntDir)\MSG00001.bin" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  52.          "t$(BuildCmds)n"
  53.          "n"
  54.          ""$(IntDir)\$(InputName).res" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  55.          "t$(BuildCmds)n"
  56.          "# End Custom Buildnn";
  57. }
  58. static void MakeResourceBuild(const char * config, ostream & out)
  59. {
  60.   out << "IF  "$(CFG)" == "" << MsDevWizardaw.m_Dictionary["Root"] << " - Win32 " << config << ""n"
  61.          "n"
  62.          "# Begin Custom Build - Building resources.n"
  63.          "InputDir=.n"
  64.          "IntDir=.\Releasen"
  65.          "InputPath=.\resources.prcn"
  66.          "InputName=resourcesn"
  67.          "n"
  68.          "BuildCmds= \n"
  69.  "tpwrc -I "$(Include)" "
  70.                 "-o $(IntDir)\$(InputName).res "
  71.                 "-b $(InputName) $(InputPath)n"
  72.          "n"
  73.          ""$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  74.          "t$(BuildCmds)n"
  75.          "n"
  76.          ""$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  77.          "t$(BuildCmds)n"
  78.          "n"
  79.          ""$(IntDir)\$(InputName).res" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
  80.          "t$(BuildCmds)n"
  81.          "# End Custom Buildnn";
  82. }
  83. // This is called just before the custom AppWizard is unloaded.
  84. void CMsDevWizardAppWiz::ExitCustomAppWiz()
  85. {
  86.   // Deallocate memory used for the dialog chooser
  87.   ASSERT(m_pChooser != NULL);
  88.   delete m_pChooser;
  89.   m_pChooser = NULL;
  90.   CString dsp_name = m_Dictionary["FULL_DIR_PATH"];
  91.   if (dsp_name[dsp_name.GetLength()-1] != '\')
  92.     dsp_name += "\";
  93.   dsp_name += m_Dictionary["Root"] + ".dsp";
  94.   CString dsp_name2 = dsp_name + "$";
  95.   ifstream in = dsp_name;
  96.   ofstream out = dsp_name2;
  97.   if (!in.is_open() || !out.is_open()) {
  98.     AfxMessageBox(IDS_PROJ_REWRITE);
  99.     return;
  100.   }
  101.   char line[1000];
  102.   while (!in.eof()) {
  103.     in.getline(line, sizeof(line));
  104.     if (strcmp(line, "# PROP BASE Use_MFC 2") == 0)
  105.       out << "# PROP BASE Use_MFC 0n";
  106.     else if (strcmp(line, "# PROP Use_MFC 2") == 0)
  107.       out << "# PROP Use_MFC 0n";
  108.     else if (strcmp(line, "SOURCE=.\precompile.cxx") == 0)
  109.       out << line << "n# ADD CPP /Yc"" + m_Dictionary["HEADER_FILE"] + ""n";
  110.     else if (strcmp(line, "SOURCE=.\custom.cxx") == 0)
  111.       out << line << "n# SUBTRACT CPP /YX /Yc /Yun";
  112.     else if (strcmp(line, "SOURCE=.\messages.mc") == 0) {
  113.       out << line << "nn!";
  114.       MakeCustomBuild("Release", out);
  115.       out << "!ELSE";
  116.       MakeCustomBuild("Debug", out);
  117.       out << "!ENDIFnn";
  118.     }
  119.     else if (strcmp(line, "SOURCE=.\resources.prc") == 0) {
  120.       out << "SOURCE=.\resources.cxxn"
  121.              "# End Source Filen"
  122.              "# Begin Source Filen"
  123.              "n"
  124.           << line << "nn!";
  125.       MakeResourceBuild("Release", out);
  126.       out << "!ELSE";
  127.       MakeResourceBuild("Debug", out);
  128.       out << "!ENDIFnn";
  129.     }
  130.     else
  131.       out << line << 'n';
  132.   }
  133.   out.flush();
  134.   out.close();
  135.   in.close();
  136.   if (remove(dsp_name) < 0)
  137.     AfxMessageBox(IDS_PROJ_REWRITE);
  138.   else if (rename(dsp_name2, dsp_name) < 0)
  139.     AfxMessageBox(IDS_PROJ_REWRITE);
  140. }
  141. // This is called when the user clicks "Create..." on the New Project dialog
  142. //  or "Next" on one of the custom AppWizard's steps.
  143. CAppWizStepDlg* CMsDevWizardAppWiz::Next(CAppWizStepDlg* pDlg)
  144. {
  145. // Delegate to the dialog chooser
  146. return m_pChooser->Next(pDlg);
  147. }
  148. // This is called when the user clicks "Back" on one of the custom
  149. //  AppWizard's steps.
  150. CAppWizStepDlg* CMsDevWizardAppWiz::Back(CAppWizStepDlg* pDlg)
  151. {
  152. // Delegate to the dialog chooser
  153. return m_pChooser->Back(pDlg);
  154. }
  155. #import "idedevbld.pkg"
  156. void CMsDevWizardAppWiz::CustomizeProject(IBuildProject* pProject)
  157. {
  158.   CString c_settings = "/Yu"" + m_Dictionary["HEADER_FILE"] + "" /W4 ";
  159.   CString l_settings = "comdlg32.lib winspool.lib wsock32.lib mpr.lib "
  160.                        "kernel32.lib user32.lib gdi32.lib shell32.lib advapi32.lib ";
  161.   if (!m_pwlib_dir.IsEmpty()) {
  162.     if (m_pwlib_dir[m_pwlib_dir.GetLength()-1] != '\')
  163.       m_pwlib_dir += "\";
  164.     c_settings += "/I "" + m_pwlib_dir + "include\pwlib\mswin" "
  165.                   "/I "" + m_pwlib_dir + "include\ptlib\msos" "
  166.                   "/I "" + m_pwlib_dir + "include" ";
  167.     l_settings += "/libpath:" + m_pwlib_dir + "lib ";
  168.   }
  169.   if (!m_has_gui && !m_is_service)
  170.     l_settings += " /subsystem:console";
  171.   // Needed to convert IBuildProject to the DSProjectSystem namespace
  172.   using namespace DSProjectSystem;
  173.   IBuildProjectPtr pProj;
  174.   pProj.Attach((DSProjectSystem::IBuildProject*)pProject, true);
  175.   IConfigurationsPtr pConfigs;
  176.   if (pProj->get_Configurations(&pConfigs) != S_OK) {
  177.     AfxMessageBox(IDS_PROJ_ERROR);
  178.     return;
  179.   }
  180.   long count;
  181.   if (pConfigs->get_Count(&count) != S_OK) {
  182.     AfxMessageBox(IDS_PROJ_ERROR);
  183.     return;
  184.   }
  185.   while (count > 0) {
  186.     COleVariant index = count;
  187.     IConfigurationPtr pConfig = pConfigs->Item(index);
  188.     BSTR name;
  189.     pConfig->get_Name(&name);
  190.     static _bstr_t debug_str = "Debug";
  191.     BOOL is_debug = wcsstr(name, debug_str) != NULL;
  192.     COleVariant reserved(0L, VT_ERROR);
  193.     reserved.scode = DISP_E_PARAMNOTFOUND;
  194.     static _bstr_t cl_exe = "cl.exe";
  195.     _bstr_t settings_bstr = "/D "_AFXDLL"";
  196.     if (pConfig->RemoveToolSettings(cl_exe, settings_bstr, reserved) != S_OK) {
  197.       AfxMessageBox(IDS_PROJ_ERROR);
  198.       return;
  199.     }
  200.     settings_bstr = c_settings;
  201.     if (pConfig->AddToolSettings(cl_exe, settings_bstr, reserved) != S_OK) {
  202.       AfxMessageBox(IDS_PROJ_ERROR);
  203.       return;
  204.     }
  205.     CString settings;
  206.     if (m_has_gui) {
  207.       settings = "pwclib";
  208.       if (is_debug) // Debug configuration
  209.         settings += "d";
  210.       settings += ".lib pwlib";
  211.       if (!m_use_dlls)
  212.         settings += "s";
  213.       if (is_debug) // Debug configuration
  214.         settings += "d";
  215.       settings += ".lib ";
  216.     }
  217.     settings += "ptclib";
  218.     if (is_debug) // Debug configuration
  219.       settings += "d";
  220.     settings += ".lib ptlib";
  221.     if (!m_use_dlls)
  222.       settings += "s";
  223.     if (is_debug) // Debug configuration
  224.       settings += "d";
  225.     settings += ".lib " + l_settings;
  226.     static _bstr_t link_exe = "link.exe";
  227.     settings_bstr = settings;
  228.     if (pConfig->AddToolSettings(link_exe, settings_bstr, reserved) != S_OK) {
  229.       AfxMessageBox(IDS_PROJ_ERROR);
  230.       return;
  231.     }
  232.     count--;
  233.   }
  234. }
  235. // Here we define one instance of the CMsDevWizardAppWiz class.  You can access
  236. //  m_Dictionary and any other public members of this class through the
  237. //  global MsDevWizardaw.
  238. CMsDevWizardAppWiz MsDevWizardaw;