WINS.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // wins.cpp : Implementation of DLL Exports.
  2. // Note: Proxy/Stub Information
  3. //      To build a separate proxy/stub DLL, 
  4. //      run nmake -f winsps.mk in the project directory.
  5. #include "stdafx.h"
  6. #include "resource.h"
  7. #include <initguid.h>
  8. #include "wins.h"
  9. #include "winsapp.h"
  10. #include "wins_i.c"
  11. #include "WindowsList.h"
  12. CComModule _Module;
  13. BEGIN_OBJECT_MAP(ObjectMap)
  14. OBJECT_ENTRY(CLSID_WindowsList, CWindowsList)
  15. END_OBJECT_MAP()
  16. BEGIN_MESSAGE_MAP(CWinsApp, CWinApp)
  17. //{{AFX_MSG_MAP(CWinsApp)
  18. // NOTE - the ClassWizard will add and remove mapping macros here.
  19. //    DO NOT EDIT what you see in these blocks of generated code!
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. CString strMainKey = _T("Software\Microsoft\devstudio\AddIns\Wins.WindowsList.1\");
  23. // don't put in 6.0 key as this will make msdev think it is already registered.
  24. // Then msdev crashes because it gets an empty CString and does a memcpy on it.
  25. CWinsApp theApp;
  26. BOOL CWinsApp::InitInstance()
  27. {
  28.     _Module.Init(ObjectMap, m_hInstance, &LIBID_WINSLib);
  29. CRegKey regKey;
  30. long lRes;
  31. unsigned long lCol, lSize;
  32. lRes = regKey.Create(HKEY_CURRENT_USER, strMainKey);
  33. if (SUCCEEDED(lRes))
  34. {
  35. regKey.QueryValue(m_fAutoSize, _T("AutoSize"));
  36. regKey.QueryValue(m_fAutoVis, _T("AutoVis"));
  37. regKey.QueryValue(m_fAutoDir, _T("AutoDir"));
  38. regKey.QueryValue(lCol, _T("SortedCol"));
  39. m_iSortedCol = (int)lCol;
  40. regKey.QueryValue(lSize, _T("Width"));
  41. if (lSize == 0)
  42. lSize = DEFAULTWIDTH;
  43. m_lSize = (int)lSize;
  44. }
  45.     return CWinApp::InitInstance();
  46. }
  47. int CWinsApp::ExitInstance()
  48. {
  49. CRegKey regKey;
  50. long lRes;
  51. lRes = regKey.Create(HKEY_CURRENT_USER, strMainKey);
  52. regKey.SetValue(m_fAutoSize, _T("AutoSize"));
  53. regKey.SetValue(m_fAutoVis, _T("AutoVis"));
  54. regKey.SetValue(m_fAutoDir, _T("AutoDir"));
  55. regKey.SetValue(m_iSortedCol, _T("SortedCol"));
  56. regKey.SetValue(m_lSize, _T("Width"));
  57.     _Module.Term();
  58.     return CWinApp::ExitInstance();
  59. }
  60. /////////////////////////////////////////////////////////////////////////////
  61. // Used to determine whether the DLL can be unloaded by OLE
  62. STDAPI DllCanUnloadNow(void)
  63. {
  64.     AFX_MANAGE_STATE(AfxGetStaticModuleState());
  65.     return (AfxDllCanUnloadNow()==S_OK && _Module.GetLockCount()==0) ? S_OK : S_FALSE;
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // Returns a class factory to create an object of the requested type
  69. STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
  70. {
  71.     return _Module.GetClassObject(rclsid, riid, ppv);
  72. }
  73. /////////////////////////////////////////////////////////////////////////////
  74. // DllRegisterServer - Adds entries to the system registry
  75. STDAPI DllRegisterServer(void)
  76. {
  77.     AFX_MANAGE_STATE(AfxGetStaticModuleState());
  78.     // registers object, typelib and all interfaces in typelib
  79.   // Register description of this add-in object in its own
  80. //  "/Description" subkey.
  81.    return _Module.RegisterServer(TRUE);
  82. }
  83. /////////////////////////////////////////////////////////////////////////////
  84. // DllUnregisterServer - Removes entries from the system registry
  85. STDAPI DllUnregisterServer(void)
  86. {
  87.     HRESULT hr = _Module.UnregisterServer();
  88. #if _WIN32_WINNT >= 0x0400
  89.     if (FAILED(hr))
  90.         return hr;
  91.     hr = UnRegisterTypeLib(LIBID_WINSLib, 1, 0, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SYS_WIN32);
  92. #endif
  93.     return hr;
  94. }