// lyfzBackupModle.cpp : 定义 DLL 的初始化例程。 // #include "stdafx.h" #include "lyfzBackupModle.h" #include "Backup.h" #include "BackupFactory.h" #include "DelFiles.h" #include "DelFilesFactory.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // //TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的, // 则从此 DLL 导出的任何调入 // MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到 // 该函数的最前面。 // // 例如: // // extern "C" BOOL PASCAL EXPORT ExportedFunction() // { // AFX_MANAGE_STATE(AfxGetStaticModuleState()); // // 此处为普通函数体 // } // // 此宏先于任何 MFC 调用 // 出现在每个函数中十分重要。这意味着 // 它必须作为函数中的第一个语句 // 出现,甚至先于所有对象变量声明, // 这是因为它们的构造函数可能生成 MFC // DLL 调用。 // // 有关其他详细信息, // 请参阅 MFC 技术说明 33 和 58。 // // ClyfzBackupModleApp BEGIN_MESSAGE_MAP(ClyfzBackupModleApp, CWinApp) END_MESSAGE_MAP() // ClyfzBackupModleApp 构造 ClyfzBackupModleApp::ClyfzBackupModleApp() { // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 ClyfzBackupModleApp 对象 ClyfzBackupModleApp theApp; // ClyfzBackupModleApp 初始化 BOOL ClyfzBackupModleApp::InitInstance() { CWinApp::InitInstance(); COleObjectFactory::RegisterAll(); //获取程序执行的当前文件路径 TCHAR szDrive[_MAX_DRIVE] = {0}; TCHAR szDir[_MAX_DIR] = {0}; ::GetModuleFileName(NULL, g_szModuleFilePath, sizeof(TCHAR)*MAX_PATH); _tsplitpath(g_szModuleFilePath, szDrive, szDir, NULL, NULL); _tcscpy(g_szModuleFilePath, szDrive); _tcscat(g_szModuleFilePath, szDir); return TRUE; } extern "C" HRESULT PASCAL EXPORT GetClassBackupObject( REFCLSID rclsid, REFIID riid, LPVOID* ppv) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 此处为普通函数体 IUnknown* pIFactory = NULL; HRESULT hr = CLASS_E_CLASSNOTAVAILABLE; if (CLSID_SC_BACKUPINTERFACE == rclsid) { hr = E_OUTOFMEMORY; pIFactory = new CSC_BackupFactory; if (pIFactory) { hr = pIFactory->QueryInterface(riid,ppv); if (FAILED(hr)) { delete pIFactory; pIFactory = NULL; } } } return hr; } extern "C" HRESULT PASCAL EXPORT GetClassDelFileObject( REFCLSID rclsid, REFIID riid, LPVOID* ppv) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // 此处为普通函数体 IUnknown* pIFactory = NULL; HRESULT hr = CLASS_E_CLASSNOTAVAILABLE; if (CLSID_SC_DELFILESINTERFACE == rclsid) { hr = E_OUTOFMEMORY; pIFactory = new CSC_DelfilesFactory; if (pIFactory) { hr = pIFactory->QueryInterface(riid,ppv); if (FAILED(hr)) { delete pIFactory; pIFactory = NULL; } } } return hr; } /* STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); //return AfxDllGetClassObject(rclsid, riid, ppv); IUnknown* pIFactory = NULL; HRESULT hr = CLASS_E_CLASSNOTAVAILABLE; if (CLSID_SC_BACKUPINTERFACE == rclsid) { hr = E_OUTOFMEMORY; pIFactory = new CSC_BackupFactory; if (pIFactory) { hr = pIFactory->QueryInterface(riid,ppv); if (FAILED(hr)) { delete pIFactory; pIFactory = NULL; } } } return hr; } STDAPI DllCanUnloadNow(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); return AfxDllCanUnloadNow(); } // by exporting DllRegisterServer, you can use regsvr.exe STDAPI DllRegisterServer(void) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); COleObjectFactory::UpdateRegistryAll(); return S_OK; } */