dllmain.cpp
1 // dllmain.cpp : Defines the entry point for the DLL application. 2 #include "pch.h" 3 #include "ClassFactory.h" 4 5 HINSTANCE g_hInst = NULL; 6 long g_cDllRef = 0; 7 8 // {FCDD4EED-41AA-492F-8A84-31A1546226E0} 9 static const GUID CLSID_SvgPreviewHandler = { 0xfcdd4eed, 0x41aa, 0x492f, { 0x8a, 0x84, 0x31, 0xa1, 0x54, 0x62, 0x26, 0xe0 } }; 10 11 BOOL APIENTRY DllMain(HMODULE hModule, 12 DWORD ul_reason_for_call, 13 LPVOID lpReserved) 14 { 15 switch (ul_reason_for_call) 16 { 17 case DLL_PROCESS_ATTACH: 18 g_hInst = hModule; 19 DisableThreadLibraryCalls(hModule); 20 break; 21 case DLL_THREAD_ATTACH: 22 case DLL_THREAD_DETACH: 23 case DLL_PROCESS_DETACH: 24 break; 25 } 26 return TRUE; 27 } 28 29 // 30 // FUNCTION: DllGetClassObject 31 // 32 // PURPOSE: Create the class factory and query to the specific interface. 33 // 34 // PARAMETERS: 35 // * rclsid - The CLSID that will associate the correct data and code. 36 // * riid - A reference to the identifier of the interface that the caller 37 // is to use to communicate with the class object. 38 // * ppv - The address of a pointer variable that receives the interface 39 // pointer requested in riid. Upon successful return, *ppv contains the 40 // requested interface pointer. If an error occurs, the interface pointer 41 // is NULL. 42 // 43 STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv) 44 { 45 HRESULT hr = CLASS_E_CLASSNOTAVAILABLE; 46 47 if (IsEqualCLSID(CLSID_SvgPreviewHandler, rclsid)) 48 { 49 hr = E_OUTOFMEMORY; 50 51 ClassFactory* pClassFactory = new ClassFactory(); 52 if (pClassFactory) 53 { 54 hr = pClassFactory->QueryInterface(riid, ppv); 55 pClassFactory->Release(); 56 } 57 } 58 59 return hr; 60 } 61 62 // 63 // FUNCTION: DllCanUnloadNow 64 // 65 // PURPOSE: Check if we can unload the component from the memory. 66 // 67 // NOTE: The component can be unloaded from the memory when its reference 68 // count is zero (i.e. nobody is still using the component). 69 // 70 STDAPI DllCanUnloadNow(void) 71 { 72 return g_cDllRef > 0 ? S_FALSE : S_OK; 73 }