TNB Library
TnbDynamicFunc.h
[詳解]
1#pragma once
13#include "TnbException.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
52template<typename FUNC>
54{
55 HMODULE m_hModule;
56 FUNC m_pFunc;
57 void m_Unload(void)
58 {
59 if ( m_hModule != NULL )
60 {
61 ::FreeLibrary(m_hModule);
62 m_hModule = NULL;
63 }
64 m_pFunc = NULL;
65 }
66public:
67
72 CDynamicFuncT(void) : m_hModule(NULL), m_pFunc(NULL)
73 {
74 }
75
82 CDynamicFuncT(LPCSTR lpszDllName, LPCSTR lpszFuncName)
83 : m_hModule(NULL), m_pFunc(NULL)
84 {
85 if ( ! LoadFunc(lpszDllName, lpszFuncName) )
86 {
88 }
89 }
90
98 bool LoadFunc(LPCSTR lpszDllName, LPCSTR lpszFuncName)
99 {
100 m_Unload();
101 m_hModule = ::LoadLibraryA(lpszDllName);
102 if ( m_hModule != NULL )
103 {
104 m_pFunc = reinterpret_cast<FUNC>(::GetProcAddressA(m_hModule, lpszFuncName));
105 }
106 return (m_pFunc != NULL);
107 }
108
113 {
114 m_Unload();
115 }
116
122 bool HasFunc(void) const
123 {
124 return (m_pFunc != NULL);
125 }
126
133 FUNC operator()(void) const
134 {
135 if ( m_pFunc == NULL )
136 {
137 throw CNullPointerException();
138 }
139 return m_pFunc;
140 }
141};
142
143
144
170template<typename FUNC>
171bool GetFuncAddress(FUNC& _pFnc, HINSTANCE hInstance, LPCSTR lpszName)
172{
173 _pFnc = reinterpret_cast<FUNC>(::GetProcAddressA(hInstance, lpszName));
174 return _pFnc != NULL;
175}
176
177
178
179}; // TNB
例外状態管理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
動的関数管理クラステンプレート
CDynamicFuncT(LPCSTR lpszDllName, LPCSTR lpszFuncName)
コンストラクタ
~CDynamicFuncT(void)
デストラクタ
bool LoadFunc(LPCSTR lpszDllName, LPCSTR lpszFuncName)
[設定] 関数読込み.
FUNC operator()(void) const
[取得] 関数アドレス取得.
bool HasFunc(void) const
[確認] 関数アドレスを持っているか
CDynamicFuncT(void)
コンストラクタ
NULLポインタ例外
Definition: TnbException.h:172
bool GetFuncAddress(FUNC &_pFnc, HINSTANCE hInstance, LPCSTR lpszName)
動的関数アドレス取得関数
TNB Library
Definition: TnbDoxyTitle.txt:2