#include "stdafx.h"
#include <initguid.h>
#include "VisVim.h"
#include "DSAddIn.h"
#include "Commands.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CComModule _Module;
BEGIN_OBJECT_MAP (ObjectMap)
OBJECT_ENTRY (CLSID_DSAddIn, CDSAddIn)
END_OBJECT_MAP ()
class CVisVimApp : public CWinApp
{
public:
CVisVimApp ();
public:
virtual BOOL InitInstance ();
virtual int ExitInstance ();
DECLARE_MESSAGE_MAP ()
};
BEGIN_MESSAGE_MAP (CVisVimApp, CWinApp)
END_MESSAGE_MAP ()
CVisVimApp theApp;
CVisVimApp::CVisVimApp ()
{
}
BOOL CVisVimApp::InitInstance ()
{
_Module.Init (ObjectMap, m_hInstance);
return CWinApp::InitInstance ();
}
int CVisVimApp::ExitInstance ()
{
_Module.Term ();
return CWinApp::ExitInstance ();
}
STDAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID * ppv)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
return _Module.GetClassObject (rclsid, riid, ppv);
}
STDAPI DllCanUnloadNow (void)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
return (AfxDllCanUnloadNow () == S_OK && _Module.GetLockCount () == 0)
? S_OK : S_FALSE;
}
STDAPI DllRegisterServer (void)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
HRESULT hRes;
hRes = _Module.RegisterServer (TRUE);
if (FAILED (hRes))
return S_OK;
_ATL_OBJMAP_ENTRY *pEntry = _Module.m_pObjMap;
CRegKey key;
LONG lRes = key.Open (HKEY_CLASSES_ROOT, _T ("CLSID"));
if (lRes == ERROR_SUCCESS)
{
USES_CONVERSION;
LPOLESTR lpOleStr;
StringFromCLSID (*pEntry->pclsid, &lpOleStr);
LPTSTR lpsz = OLE2T (lpOleStr);
lRes = key.Open (key, lpsz);
if (lRes == ERROR_SUCCESS)
{
CString strDescription;
strDescription.LoadString (IDS_VISVIM_DESCRIPTION);
key.SetKeyValue (_T ("Description"), strDescription);
}
CoTaskMemFree (lpOleStr);
}
if (lRes != ERROR_SUCCESS)
hRes = HRESULT_FROM_WIN32 (lRes);
return hRes;
}
STDAPI DllUnregisterServer (void)
{
AFX_MANAGE_STATE (AfxGetStaticModuleState ());
HRESULT hRes = S_OK;
_Module.UnregisterServer ();
return hRes;
}
#ifdef _DEBUG
void GetLastErrorDescription (CComBSTR & bstr)
{
CComPtr < IErrorInfo > pErrorInfo;
if (GetErrorInfo (0, &pErrorInfo) == S_OK)
pErrorInfo->GetDescription (&bstr);
}
#endif //_DEBUG