home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 June
/
VPR0106A.BIN
/
OLS
/
PREX102
/
PrEx102.lzh
/
Src.lzh
/
ProjExp.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2001-02-23
|
5KB
|
171 lines
// ProjExp.cpp : DLL 用の初期化処理ルーチンを定義します。
//
#include "stdafx.h"
#include <initguid.h>
#include "ProjExp.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()
/////////////////////////////////////////////////////////////////////////////
// CProjExpApp
class CProjExpApp : public CWinApp
{
public:
CProjExpApp();
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します
//{{AFX_VIRTUAL(CProjExpApp)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL
//{{AFX_MSG(CProjExpApp)
// メモ - ClassWizard はこの位置にメンバ関数を追加または削除します。
// この位置に生成されるコードを編集しないでください !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CProjExpApp
BEGIN_MESSAGE_MAP(CProjExpApp, CWinApp)
//{{AFX_MSG_MAP(CProjExpApp)
// メモ - ClassWizard はこの位置にマッピング用のマクロを追加または削除します。
// この位置に生成されるコードを編集しないでください !
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// 唯一の CProjExpApp オブジェクト
CProjExpApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CProjExpApp の構築
CProjExpApp::CProjExpApp()
{
// TODO: この位置に構築用のコードを追加してください。
// ここに InitInstance 中の重要な初期化処理をすべて記述してください。
}
/////////////////////////////////////////////////////////////////////////////
// CProjExpApp の初期化
BOOL CProjExpApp::InitInstance()
{
_Module.Init(ObjectMap, m_hInstance);
return CWinApp::InitInstance();
}
int CProjExpApp::ExitInstance()
{
_Module.Term();
return CWinApp::ExitInstance();
}
/////////////////////////////////////////////////////////////////////////////
// inproc サーバーで要求される特別なエントリ ポイント
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;
}
// DllRegisterServer のエクスポートで、regsvr32.exe を使用できます
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HRESULT hRes = S_OK;
// オブジェクト、タイプライブラリおよびタイプライブラリ内のすべてのインターフェイスの登録
hRes = _Module.RegisterServer(TRUE);
if (FAILED(hRes))
return hRes;
// このアドイン オブジェクトの説明を "/Description" サブ キー内に
// 登録します。
// TODO: このモジュールに対して複数のアドインを追加する場合は、す
// べての説明を、各アドイン オブジェクトのレジストリ CLSID エント
// リ内で各説明を登録する必要があります:
// HKEY_CLASSES_ROOT\Clsid\{add-in CLSID}\Description="アドインの説明"
_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_PROJEXP_DESCRIPTION);
key.SetKeyValue(_T("Description"), strDescription);
}
CoTaskMemFree(lpOleStr);
}
if (lRes != ERROR_SUCCESS)
hRes = HRESULT_FROM_WIN32(lRes);
return hRes;
}
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - システム レジストリからエントリを削除します
STDAPI DllUnregisterServer(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
HRESULT hRes = S_OK;
_Module.UnregisterServer();
return hRes;
}
/////////////////////////////////////////////////////////////////////////////
// デバッグ サポート
// GetLastErrorDescription は VERIFY_OK マクロのインプリメンテーションで
// 使用されます、stdafx.h 内で定義しています。
#ifdef _DEBUG
void GetLastErrorDescription(CComBSTR& bstr)
{
CComPtr<IErrorInfo> pErrorInfo;
if (GetErrorInfo(0, &pErrorInfo) == S_OK)
pErrorInfo->GetDescription(&bstr);
}
#endif //_DEBUG