VisVim.cpp
上传用户:gddssl
上传日期:2007-01-06
资源大小:1003k
文件大小:3k
源码类别:

编辑器/阅读器

开发平台:

DOS

  1. // VisVim.cpp : Defines the initialization routines for the DLL.
  2. //
  3. #include "stdafx.h"
  4. #include <initguid.h>
  5. #include "VisVim.h"
  6. #include "DSAddIn.h"
  7. #include "Commands.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. CComModule _Module;
  14. BEGIN_OBJECT_MAP (ObjectMap)
  15. OBJECT_ENTRY (CLSID_DSAddIn, CDSAddIn)
  16. END_OBJECT_MAP ()
  17. class CVisVimApp : public CWinApp
  18. {
  19.     public:
  20. CVisVimApp ();
  21. //{{AFX_VIRTUAL(CVisVimApp)
  22.     public:
  23. virtual BOOL InitInstance ();
  24. virtual int ExitInstance ();
  25. //}}AFX_VIRTUAL
  26. //{{AFX_MSG(CVisVimApp)
  27. //}}AFX_MSG
  28. DECLARE_MESSAGE_MAP ()
  29. };
  30. BEGIN_MESSAGE_MAP (CVisVimApp, CWinApp)
  31. //{{AFX_MSG_MAP(CVisVimApp)
  32. //}}AFX_MSG_MAP
  33. END_MESSAGE_MAP ()
  34. // The one and only CVisVimApp object
  35. CVisVimApp theApp;
  36. CVisVimApp::CVisVimApp ()
  37. {
  38. }
  39. BOOL CVisVimApp::InitInstance ()
  40. {
  41. _Module.Init (ObjectMap, m_hInstance);
  42. return CWinApp::InitInstance ();
  43. }
  44. int CVisVimApp::ExitInstance ()
  45. {
  46. _Module.Term ();
  47. return CWinApp::ExitInstance ();
  48. }
  49. // Special entry points required for inproc servers
  50. //
  51. STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID * ppv)
  52. {
  53. AFX_MANAGE_STATE (AfxGetStaticModuleState ());
  54. return _Module.GetClassObject (rclsid, riid, ppv);
  55. }
  56. STDAPI DllCanUnloadNow (void)
  57. {
  58. AFX_MANAGE_STATE (AfxGetStaticModuleState ());
  59. return (AfxDllCanUnloadNow () == S_OK && _Module.GetLockCount () == 0)
  60. ? S_OK : S_FALSE;
  61. }
  62. // By exporting DllRegisterServer, you can use regsvr32.exe
  63. //
  64. STDAPI DllRegisterServer (void)
  65. {
  66. AFX_MANAGE_STATE (AfxGetStaticModuleState ());
  67. HRESULT hRes;
  68. OSVERSIONINFO osInfo;
  69. osInfo.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
  70. GetVersionEx (&osInfo);
  71. // Registers object, typelib and all interfaces in typelib
  72. hRes = _Module.RegisterServer (TRUE);
  73. if (!FAILED (hRes))
  74. {
  75. _ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
  76. CRegKey key;
  77. LONG lRes = key.Open (HKEY_CLASSES_ROOT, _T ("CLSID"));
  78. if (lRes == ERROR_SUCCESS)
  79. {
  80. USES_CONVERSION;
  81. LPOLESTR lpOleStr;
  82. StringFromCLSID (*pEntry->pclsid, &lpOleStr);
  83. LPTSTR lpsz = OLE2T (lpOleStr);
  84. lRes = key.Open (key, lpsz);
  85. if (lRes == ERROR_SUCCESS)
  86. {
  87. CString strDescription;
  88. strDescription.LoadString (IDS_VISVIM_DESCRIPTION);
  89. key.SetKeyValue (_T ("Description"), strDescription);
  90. }
  91. CoTaskMemFree (lpOleStr);
  92. }
  93. if (lRes != ERROR_SUCCESS)
  94. hRes = HRESULT_FROM_WIN32 (lRes);
  95. }
  96. // If you try to load the DLL from NT *WITHOUT* Admin priviledges
  97. // it will fail.  Right now we just assume things are okay under
  98. // NT but what it SHOULD do is check to make sure the registry
  99. // is configured properly and return error if not.
  100. if (FAILED (hRes) && (osInfo.dwPlatformId != VER_PLATFORM_WIN32_NT))
  101. return hRes;
  102. else
  103. hRes = S_OK;
  104. return hRes;
  105. }
  106. // DllUnregisterServer - Removes entries from the system registry
  107. //
  108. STDAPI DllUnregisterServer (void)
  109. {
  110. AFX_MANAGE_STATE (AfxGetStaticModuleState ());
  111. HRESULT hRes = S_OK;
  112. _Module.UnregisterServer ();
  113. return hRes;
  114. }
  115. // Debugging support
  116. // GetLastErrorDescription is used in the implementation of the VERIFY_OK
  117. //  macro, defined in stdafx.h.
  118. #ifdef _DEBUG
  119. void GetLastErrorDescription (CComBSTR & bstr)
  120. {
  121. CComPtr < IErrorInfo > pErrorInfo;
  122. if (GetErrorInfo (0, &pErrorInfo) == S_OK)
  123. pErrorInfo->GetDescription (&bstr);
  124. }
  125. #endif //_DEBUG