📄 warmmcsnapin.cpp
字号:
//==============================================================;//// This source code is only intended as a supplement to existing Microsoft documentation. //// ////// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR// PURPOSE.//// Copyright (C) 1999 - 2000 Microsoft Corporation. All Rights Reserved.////////==============================================================;/* * Modified and adapted to War FTP Daemon Lite by Jarle Aase * Copyright 2001 by Jarle (jgaa) Aase * */#include "StdAfx.h"#include <objbase.h>#include <olectl.h>#include <initguid.h>#include "guids.h"#include "Registry.h"#include "WarMmcSnapin.h"#include "ClassFactory.h"#include "WarSmartPointer.h"#include "WarLogEngine.h"STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvObj);STDAPI DllCanUnloadNow(void);// our globalsHINSTANCE g_hinst;ULONG g_uObjects = 0;ULONG g_uSrvLock = 0;#ifdef _AFXDLLclass MyApp : public CWinApp{public: MyApp() { g_hinst = NULL; } BOOL InitInstance() { if (!g_hinst) g_hinst = m_hInstance; WarSmartPointer::Initialize(); return CWinApp::InitInstance(); } WarLogEngine mLogEngine;};MyApp g_MyApp;#else // !_AFXDLLBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, void* lpvReserved){ AFX_MANAGE_STATE(AfxGetStaticModuleState()) if (fdwReason == DLL_PROCESS_ATTACH) { g_hinst = hinstDLL; } return TRUE;}#endif // !_AFXDLLSTDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvObj){ AFX_MANAGE_STATE(AfxGetStaticModuleState()) if ((rclsid != CLSID_CComponentData) && (rclsid != CLSID_CSnapinAbout)) return CLASS_E_CLASSNOTAVAILABLE; if (!ppvObj) return E_FAIL; *ppvObj = NULL; // We can only hand out IUnknown and IClassFactory pointers. Fail // if they ask for anything else. if (!IsEqualIID(riid, IID_IUnknown) && !IsEqualIID(riid, IID_IClassFactory)) return E_NOINTERFACE; CClassFactory *pFactory = NULL; // make the factory passing in the creation function for the type of object they want if (rclsid == CLSID_CComponentData) pFactory = new CClassFactory(CClassFactory::COMPONENT); else if (rclsid == CLSID_CSnapinAbout) pFactory = new CClassFactory(CClassFactory::ABOUT); if (NULL == pFactory) return E_OUTOFMEMORY; HRESULT hr = pFactory->QueryInterface(riid, ppvObj); return hr;}STDAPI DllCanUnloadNow(void){ AFX_MANAGE_STATE(AfxGetStaticModuleState()) if (g_uObjects == 0 && g_uSrvLock == 0) return S_OK; else return S_FALSE;}////////////////////////////////////////////////////////////// Exported functions////// Server registration//STDAPI DllRegisterServer(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()) HRESULT hr = SELFREG_E_CLASS; _TCHAR szName[256]; _TCHAR szSnapInName[256]; LoadString(g_hinst, IDS_NAME, szName, sizeof(szName)); LoadString(g_hinst, IDS_SNAPINNAME, szSnapInName, sizeof(szSnapInName)); _TCHAR szAboutName[256]; LoadString(g_hinst, IDS_ABOUTNAME, szAboutName, sizeof(szAboutName)); // register our CoClasses hr = RegisterServer(g_hinst, CLSID_CComponentData, szName); if SUCCEEDED(hr) hr = RegisterServer(g_hinst, CLSID_CSnapinAbout, szAboutName); // place the registry information for SnapIns if SUCCEEDED(hr) hr = RegisterSnapin(CLSID_CComponentData, szSnapInName, CLSID_CSnapinAbout, FALSE); return hr;}STDAPI DllUnregisterServer(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()) if (UnregisterServer(CLSID_CComponentData) == S_OK) return UnregisterSnapin(CLSID_CComponentData); else return E_FAIL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -