home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectInput / DIConfig / main.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  2.5 KB  |  125 lines

  1. //-----------------------------------------------------------------------------
  2. // File: main.cpp
  3. //
  4. // Desc: Contains global data and DllMain.
  5. //
  6. // Copyright (C) 1999-2001 Microsoft Corporation. All Rights Reserved.
  7. //-----------------------------------------------------------------------------
  8.  
  9. #include "common.hpp"
  10.  
  11.  
  12. HMODULE g_hModule = NULL;
  13. long g_cComponents = 0;
  14. long g_cServerLocks = 0;
  15.  
  16. //exported fns
  17.  
  18. //can unload?
  19. STDAPI DllCanUnloadNow()
  20. {
  21.     if ((g_cComponents == 0)     && (g_cServerLocks == 0))
  22.     {
  23.         return S_OK;
  24.     }
  25.     else
  26.     {
  27.         return S_FALSE;
  28.     }
  29. }
  30.  
  31.  
  32. //get class factory
  33. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  34. {
  35.  
  36.     HRESULT hr = S_OK;
  37.  
  38.     //check which class it is
  39.     if ((rclsid != CLSID_CDirectInputActionFramework)
  40.         && (rclsid != CLSID_CDIDeviceActionConfigPage)
  41.        )
  42.     {
  43.         return CLASS_E_CLASSNOTAVAILABLE;
  44.     }
  45.  
  46.     //create the appropriate class factory
  47.     IClassFactory* pFact = NULL;
  48.  
  49.     if (rclsid == CLSID_CDirectInputActionFramework)
  50.         pFact = new CFactory();
  51.  
  52.     if (rclsid == CLSID_CDIDeviceActionConfigPage)
  53.         pFact = new CPageFactory();
  54.  
  55.  
  56.     if (pFact == NULL)
  57.         return E_OUTOFMEMORY;
  58.  
  59.     hr = pFact->QueryInterface(riid, ppv);
  60.     pFact->Release();
  61.  
  62.     return hr;
  63. }
  64.  
  65.  
  66. //dll module information
  67. BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
  68. {
  69.     switch(dwReason)
  70.     {
  71.         case DLL_PROCESS_ATTACH:
  72.             g_hModule = (HMODULE)hModule;
  73.             CFlexWnd::RegisterWndClass((HINSTANCE)hModule);
  74.  
  75.             break;
  76.  
  77.         case DLL_PROCESS_DETACH:
  78.             CFlexWnd::UnregisterWndClass((HINSTANCE)hModule);
  79.             break;
  80.     }
  81.  
  82.     return TRUE;
  83. }
  84.  
  85.  
  86. //server registration
  87. STDAPI DllRegisterServer()
  88. {
  89.     HRESULT hr1 = S_OK, hr2 = S_OK, hr3 = S_OK;
  90.  
  91.     hr1 = RegisterServer(g_hModule, CLSID_CDirectInputActionFramework, _T("CLSID_CDirectInputActionFramework"), _T("DIACTFRM"), _T("DIACTFRM.1"));
  92.     hr2 = RegisterServer(g_hModule, CLSID_CDIDeviceActionConfigPage, _T("CLSID_CDIDeviceActionConfigPage"), _T("DIACTFRM"), _T("DIACTFRM.1"));
  93.  
  94.     if (FAILED(hr1))
  95.         return hr1;
  96.  
  97.     if (FAILED(hr2))
  98.         return hr2;
  99.  
  100.     if (FAILED(hr3))
  101.         return hr3;
  102.  
  103.     return S_OK;
  104. }
  105.  
  106. //server unregistration
  107. STDAPI DllUnregisterServer()
  108. {
  109.     HRESULT hr1 = S_OK, hr2 = S_OK, hr3 = S_OK;
  110.  
  111.     hr1 = UnregisterServer(CLSID_CDirectInputActionFramework, _T("DIACTFRM"), _T("DIACTFRM.1"));
  112.     hr2 = UnregisterServer(CLSID_CDIDeviceActionConfigPage, _T("DIACTFRM"), _T("DIACTFRM.1"));
  113.  
  114.     if (FAILED(hr1))
  115.         return hr1;
  116.  
  117.     if (FAILED(hr2))
  118.         return hr2;
  119.  
  120.     if (FAILED(hr3))
  121.         return hr3;
  122.  
  123.     return S_OK;
  124. }
  125.