1*071d4279SBram Moolenaar // VisVim.cpp : Defines the initialization routines for the DLL.
2*071d4279SBram Moolenaar //
3*071d4279SBram Moolenaar
4*071d4279SBram Moolenaar #include "stdafx.h"
5*071d4279SBram Moolenaar #include <initguid.h>
6*071d4279SBram Moolenaar #include "VisVim.h"
7*071d4279SBram Moolenaar #include "DSAddIn.h"
8*071d4279SBram Moolenaar #include "Commands.h"
9*071d4279SBram Moolenaar
10*071d4279SBram Moolenaar #ifdef _DEBUG
11*071d4279SBram Moolenaar #define new DEBUG_NEW
12*071d4279SBram Moolenaar #undef THIS_FILE
13*071d4279SBram Moolenaar static char THIS_FILE[] = __FILE__;
14*071d4279SBram Moolenaar
15*071d4279SBram Moolenaar #endif
16*071d4279SBram Moolenaar
17*071d4279SBram Moolenaar CComModule _Module;
18*071d4279SBram Moolenaar
19*071d4279SBram Moolenaar BEGIN_OBJECT_MAP (ObjectMap)
20*071d4279SBram Moolenaar OBJECT_ENTRY (CLSID_DSAddIn, CDSAddIn)
21*071d4279SBram Moolenaar END_OBJECT_MAP ()
22*071d4279SBram Moolenaar
23*071d4279SBram Moolenaar class CVisVimApp : public CWinApp
24*071d4279SBram Moolenaar {
25*071d4279SBram Moolenaar public:
26*071d4279SBram Moolenaar CVisVimApp ();
27*071d4279SBram Moolenaar
28*071d4279SBram Moolenaar //{{AFX_VIRTUAL(CVisVimApp)
29*071d4279SBram Moolenaar public:
30*071d4279SBram Moolenaar virtual BOOL InitInstance ();
31*071d4279SBram Moolenaar virtual int ExitInstance ();
32*071d4279SBram Moolenaar //}}AFX_VIRTUAL
33*071d4279SBram Moolenaar
34*071d4279SBram Moolenaar //{{AFX_MSG(CVisVimApp)
35*071d4279SBram Moolenaar //}}AFX_MSG
36*071d4279SBram Moolenaar DECLARE_MESSAGE_MAP ()
37*071d4279SBram Moolenaar };
38*071d4279SBram Moolenaar
39*071d4279SBram Moolenaar BEGIN_MESSAGE_MAP (CVisVimApp, CWinApp)
40*071d4279SBram Moolenaar //{{AFX_MSG_MAP(CVisVimApp)
41*071d4279SBram Moolenaar //}}AFX_MSG_MAP
42*071d4279SBram Moolenaar END_MESSAGE_MAP ()
43*071d4279SBram Moolenaar
44*071d4279SBram Moolenaar // The one and only CVisVimApp object
45*071d4279SBram Moolenaar CVisVimApp theApp;
46*071d4279SBram Moolenaar
CVisVimApp()47*071d4279SBram Moolenaar CVisVimApp::CVisVimApp ()
48*071d4279SBram Moolenaar {
49*071d4279SBram Moolenaar }
50*071d4279SBram Moolenaar
InitInstance()51*071d4279SBram Moolenaar BOOL CVisVimApp::InitInstance ()
52*071d4279SBram Moolenaar {
53*071d4279SBram Moolenaar _Module.Init (ObjectMap, m_hInstance);
54*071d4279SBram Moolenaar return CWinApp::InitInstance ();
55*071d4279SBram Moolenaar }
56*071d4279SBram Moolenaar
ExitInstance()57*071d4279SBram Moolenaar int CVisVimApp::ExitInstance ()
58*071d4279SBram Moolenaar {
59*071d4279SBram Moolenaar _Module.Term ();
60*071d4279SBram Moolenaar return CWinApp::ExitInstance ();
61*071d4279SBram Moolenaar }
62*071d4279SBram Moolenaar
63*071d4279SBram Moolenaar // Special entry points required for inproc servers
64*071d4279SBram Moolenaar //
65*071d4279SBram Moolenaar
DllGetClassObject(REFCLSID rclsid,REFIID riid,LPVOID * ppv)66*071d4279SBram Moolenaar STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID * ppv)
67*071d4279SBram Moolenaar {
68*071d4279SBram Moolenaar AFX_MANAGE_STATE (AfxGetStaticModuleState ());
69*071d4279SBram Moolenaar return _Module.GetClassObject (rclsid, riid, ppv);
70*071d4279SBram Moolenaar }
71*071d4279SBram Moolenaar
DllCanUnloadNow(void)72*071d4279SBram Moolenaar STDAPI DllCanUnloadNow (void)
73*071d4279SBram Moolenaar {
74*071d4279SBram Moolenaar AFX_MANAGE_STATE (AfxGetStaticModuleState ());
75*071d4279SBram Moolenaar return (AfxDllCanUnloadNow () == S_OK && _Module.GetLockCount () == 0)
76*071d4279SBram Moolenaar ? S_OK : S_FALSE;
77*071d4279SBram Moolenaar }
78*071d4279SBram Moolenaar
79*071d4279SBram Moolenaar // By exporting DllRegisterServer, you can use regsvr32.exe
80*071d4279SBram Moolenaar //
DllRegisterServer(void)81*071d4279SBram Moolenaar STDAPI DllRegisterServer (void)
82*071d4279SBram Moolenaar {
83*071d4279SBram Moolenaar AFX_MANAGE_STATE (AfxGetStaticModuleState ());
84*071d4279SBram Moolenaar HRESULT hRes;
85*071d4279SBram Moolenaar
86*071d4279SBram Moolenaar // Registers object, typelib and all interfaces in typelib
87*071d4279SBram Moolenaar hRes = _Module.RegisterServer (TRUE);
88*071d4279SBram Moolenaar if (FAILED (hRes))
89*071d4279SBram Moolenaar // Hack: When this fails we might be a normal user, while the
90*071d4279SBram Moolenaar // admin already registered the module. Returning S_OK then
91*071d4279SBram Moolenaar // makes it work. When the module was never registered it
92*071d4279SBram Moolenaar // will soon fail in another way.
93*071d4279SBram Moolenaar // old code: return hRes;
94*071d4279SBram Moolenaar return S_OK;
95*071d4279SBram Moolenaar
96*071d4279SBram Moolenaar _ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
97*071d4279SBram Moolenaar CRegKey key;
98*071d4279SBram Moolenaar LONG lRes = key.Open (HKEY_CLASSES_ROOT, _T ("CLSID"));
99*071d4279SBram Moolenaar
100*071d4279SBram Moolenaar if (lRes == ERROR_SUCCESS)
101*071d4279SBram Moolenaar {
102*071d4279SBram Moolenaar USES_CONVERSION;
103*071d4279SBram Moolenaar LPOLESTR lpOleStr;
104*071d4279SBram Moolenaar
105*071d4279SBram Moolenaar StringFromCLSID (*pEntry->pclsid, &lpOleStr);
106*071d4279SBram Moolenaar LPTSTR lpsz = OLE2T (lpOleStr);
107*071d4279SBram Moolenaar
108*071d4279SBram Moolenaar lRes = key.Open (key, lpsz);
109*071d4279SBram Moolenaar if (lRes == ERROR_SUCCESS)
110*071d4279SBram Moolenaar {
111*071d4279SBram Moolenaar CString strDescription;
112*071d4279SBram Moolenaar
113*071d4279SBram Moolenaar strDescription.LoadString (IDS_VISVIM_DESCRIPTION);
114*071d4279SBram Moolenaar key.SetKeyValue (_T ("Description"), strDescription);
115*071d4279SBram Moolenaar }
116*071d4279SBram Moolenaar CoTaskMemFree (lpOleStr);
117*071d4279SBram Moolenaar }
118*071d4279SBram Moolenaar
119*071d4279SBram Moolenaar if (lRes != ERROR_SUCCESS)
120*071d4279SBram Moolenaar hRes = HRESULT_FROM_WIN32 (lRes);
121*071d4279SBram Moolenaar
122*071d4279SBram Moolenaar return hRes;
123*071d4279SBram Moolenaar
124*071d4279SBram Moolenaar }
125*071d4279SBram Moolenaar
126*071d4279SBram Moolenaar // DllUnregisterServer - Removes entries from the system registry
127*071d4279SBram Moolenaar //
DllUnregisterServer(void)128*071d4279SBram Moolenaar STDAPI DllUnregisterServer (void)
129*071d4279SBram Moolenaar {
130*071d4279SBram Moolenaar AFX_MANAGE_STATE (AfxGetStaticModuleState ());
131*071d4279SBram Moolenaar
132*071d4279SBram Moolenaar HRESULT hRes = S_OK;
133*071d4279SBram Moolenaar _Module.UnregisterServer ();
134*071d4279SBram Moolenaar return hRes;
135*071d4279SBram Moolenaar }
136*071d4279SBram Moolenaar
137*071d4279SBram Moolenaar
138*071d4279SBram Moolenaar // Debugging support
139*071d4279SBram Moolenaar
140*071d4279SBram Moolenaar // GetLastErrorDescription is used in the implementation of the VERIFY_OK
141*071d4279SBram Moolenaar // macro, defined in stdafx.h.
142*071d4279SBram Moolenaar
143*071d4279SBram Moolenaar #ifdef _DEBUG
144*071d4279SBram Moolenaar
GetLastErrorDescription(CComBSTR & bstr)145*071d4279SBram Moolenaar void GetLastErrorDescription (CComBSTR & bstr)
146*071d4279SBram Moolenaar {
147*071d4279SBram Moolenaar CComPtr < IErrorInfo > pErrorInfo;
148*071d4279SBram Moolenaar if (GetErrorInfo (0, &pErrorInfo) == S_OK)
149*071d4279SBram Moolenaar pErrorInfo->GetDescription (&bstr);
150*071d4279SBram Moolenaar }
151*071d4279SBram Moolenaar
152*071d4279SBram Moolenaar #endif //_DEBUG
153