//----------------------------------------------------------------------------- // File: main.cpp // // Desc: Contains global data and DllMain. // // Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved. //----------------------------------------------------------------------------- #include "common.hpp" HMODULE g_hModule = NULL; long g_cComponents = 0; long g_cServerLocks = 0; //exported fns //can unload? STDAPI DllCanUnloadNow() { if ((g_cComponents == 0) && (g_cServerLocks == 0)) { return S_OK; } else { return S_FALSE; } } //get class factory STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { HRESULT hr = S_OK; //check which class it is if ((rclsid != CLSID_CDirectInputActionFramework) && (rclsid != CLSID_CDIDeviceActionConfigPage) //@@BEGIN_MSINTERNAL #ifdef DDKBUILD #ifdef DBG && (rclsid != CLSID_CDirectInputConfigUITest) #endif #endif //@@END_MSINTERNAL ) { return CLASS_E_CLASSNOTAVAILABLE; } //create the appropriate class factory IClassFactory* pFact = NULL; if (rclsid == CLSID_CDirectInputActionFramework) pFact = new CFactory(); if (rclsid == CLSID_CDIDeviceActionConfigPage) pFact = new CPageFactory(); //@@BEGIN_MSINTERNAL #ifdef DDKBUILD #ifdef DBG if (rclsid == CLSID_CDirectInputConfigUITest) pFact = new CTestFactory(); #endif #endif //@@END_MSINTERNAL if (pFact == NULL) return E_OUTOFMEMORY; hr = pFact->QueryInterface(riid, ppv); pFact->Release(); return hr; } //dll module information BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { switch(dwReason) { case DLL_PROCESS_ATTACH: g_hModule = (HMODULE)hModule; CFlexWnd::RegisterWndClass((HINSTANCE)hModule); break; case DLL_PROCESS_DETACH: CFlexWnd::UnregisterWndClass((HINSTANCE)hModule); break; } return TRUE; } //server registration STDAPI DllRegisterServer() { HRESULT hr1 = S_OK, hr2 = S_OK, hr3 = S_OK; hr1 = RegisterServer(g_hModule, CLSID_CDirectInputActionFramework, _T("CLSID_CDirectInputActionFramework"), _T("DIACTFRM"), _T("DIACTFRM.1")); hr2 = RegisterServer(g_hModule, CLSID_CDIDeviceActionConfigPage, _T("CLSID_CDIDeviceActionConfigPage"), _T("DIACTFRM"), _T("DIACTFRM.1")); //@@BEGIN_MSINTERNAL #ifdef DDKBUILD #ifdef DBG hr3 = RegisterServer(g_hModule, CLSID_CDirectInputConfigUITest, _T("CLSID_CDirectInputConfigUITest"), _T("DIACTFRM"), _T("DIACTFRM.1")); #endif #endif //@@END_MSINTERNAL if (FAILED(hr1)) return hr1; if (FAILED(hr2)) return hr2; if (FAILED(hr3)) return hr3; return S_OK; } //server unregistration STDAPI DllUnregisterServer() { HRESULT hr1 = S_OK, hr2 = S_OK, hr3 = S_OK; hr1 = UnregisterServer(CLSID_CDirectInputActionFramework, _T("DIACTFRM"), _T("DIACTFRM.1")); hr2 = UnregisterServer(CLSID_CDIDeviceActionConfigPage, _T("DIACTFRM"), _T("DIACTFRM.1")); //@@BEGIN_MSINTERNAL #ifdef DDKBUILD #ifdef DBG hr3 = UnregisterServer(CLSID_CDirectInputConfigUITest, _T("DIACTFRM"), _T("DIACTFRM.1")); #endif #endif //@@END_MSINTERNAL if (FAILED(hr1)) return hr1; if (FAILED(hr2)) return hr2; if (FAILED(hr3)) return hr3; return S_OK; }