lyfzBackupModle.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // lyfzBackupModle.cpp : 定义 DLL 的初始化例程。
  2. //
  3. #include "stdafx.h"
  4. #include "lyfzBackupModle.h"
  5. #include "Backup.h"
  6. #include "BackupFactory.h"
  7. #include "DelFiles.h"
  8. #include "DelFilesFactory.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. //
  15. //TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
  16. // 则从此 DLL 导出的任何调入
  17. // MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
  18. // 该函数的最前面。
  19. //
  20. // 例如:
  21. //
  22. // extern "C" BOOL PASCAL EXPORT ExportedFunction()
  23. // {
  24. // AFX_MANAGE_STATE(AfxGetStaticModuleState());
  25. // // 此处为普通函数体
  26. // }
  27. //
  28. // 此宏先于任何 MFC 调用
  29. // 出现在每个函数中十分重要。这意味着
  30. // 它必须作为函数中的第一个语句
  31. // 出现,甚至先于所有对象变量声明,
  32. // 这是因为它们的构造函数可能生成 MFC
  33. // DLL 调用。
  34. //
  35. // 有关其他详细信息,
  36. // 请参阅 MFC 技术说明 33 和 58。
  37. //
  38. // ClyfzBackupModleApp
  39. BEGIN_MESSAGE_MAP(ClyfzBackupModleApp, CWinApp)
  40. END_MESSAGE_MAP()
  41. // ClyfzBackupModleApp 构造
  42. ClyfzBackupModleApp::ClyfzBackupModleApp()
  43. {
  44. // TODO: 在此处添加构造代码,
  45. // 将所有重要的初始化放置在 InitInstance 中
  46. }
  47. // 唯一的一个 ClyfzBackupModleApp 对象
  48. ClyfzBackupModleApp theApp;
  49. // ClyfzBackupModleApp 初始化
  50. BOOL ClyfzBackupModleApp::InitInstance()
  51. {
  52. CWinApp::InitInstance();
  53. COleObjectFactory::RegisterAll();
  54. //获取程序执行的当前文件路径
  55. TCHAR szDrive[_MAX_DRIVE] = {0};
  56. TCHAR szDir[_MAX_DIR] = {0};
  57. ::GetModuleFileName(NULL, g_szModuleFilePath, sizeof(TCHAR)*MAX_PATH);
  58. _tsplitpath(g_szModuleFilePath, szDrive, szDir, NULL, NULL);
  59. _tcscpy(g_szModuleFilePath, szDrive);
  60. _tcscat(g_szModuleFilePath, szDir);
  61. return TRUE;
  62. }
  63. extern "C" HRESULT PASCAL EXPORT GetClassBackupObject(
  64. REFCLSID rclsid,
  65. REFIID riid,
  66. LPVOID* ppv)
  67. {
  68. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  69. // 此处为普通函数体
  70. IUnknown* pIFactory = NULL;
  71. HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
  72. if (CLSID_SC_BACKUPINTERFACE == rclsid)
  73. {
  74. hr = E_OUTOFMEMORY;
  75. pIFactory = new CSC_BackupFactory;
  76. if (pIFactory)
  77. {
  78. hr = pIFactory->QueryInterface(riid,ppv);
  79. if (FAILED(hr))
  80. {
  81. delete pIFactory;
  82. pIFactory = NULL;
  83. }
  84. }
  85. }
  86. return hr;
  87. }
  88. extern "C" HRESULT PASCAL EXPORT GetClassDelFileObject(
  89. REFCLSID rclsid,
  90. REFIID riid,
  91. LPVOID* ppv)
  92. {
  93. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  94. // 此处为普通函数体
  95. IUnknown* pIFactory = NULL;
  96. HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
  97. if (CLSID_SC_DELFILESINTERFACE == rclsid)
  98. {
  99. hr = E_OUTOFMEMORY;
  100. pIFactory = new CSC_DelfilesFactory;
  101. if (pIFactory)
  102. {
  103. hr = pIFactory->QueryInterface(riid,ppv);
  104. if (FAILED(hr))
  105. {
  106. delete pIFactory;
  107. pIFactory = NULL;
  108. }
  109. }
  110. }
  111. return hr;
  112. }
  113. /*
  114. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  115. {
  116. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  117. //return AfxDllGetClassObject(rclsid, riid, ppv);
  118. IUnknown* pIFactory = NULL;
  119. HRESULT hr = CLASS_E_CLASSNOTAVAILABLE;
  120. if (CLSID_SC_BACKUPINTERFACE == rclsid)
  121. {
  122. hr = E_OUTOFMEMORY;
  123. pIFactory = new CSC_BackupFactory;
  124. if (pIFactory)
  125. {
  126. hr = pIFactory->QueryInterface(riid,ppv);
  127. if (FAILED(hr))
  128. {
  129. delete pIFactory;
  130. pIFactory = NULL;
  131. }
  132. }
  133. }
  134. return hr;
  135. }
  136. STDAPI DllCanUnloadNow(void)
  137. {
  138. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  139. return AfxDllCanUnloadNow();
  140. }
  141. // by exporting DllRegisterServer, you can use regsvr.exe
  142. STDAPI DllRegisterServer(void)
  143. {
  144. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  145. COleObjectFactory::UpdateRegistryAll();
  146. return S_OK;
  147. }
  148. */