Author: hollowlife1987
(2007/10/24 20:24) Over 4 years ago
Added concurency control.
28
29
list<Plugin*> Plugin::s_Plugins;
30
list<Plugin*>::iterator Plugin::s_iter = s_Plugins.begin();
31
HANDLE Plugin::s_PluginMutex = CreateMutex(NULL, false, "GenericaPluginMutex");
32
Plugin::Plugin(CString strPluginName)
33
{
34
...
57
58
void Plugin::RegisterProc(HMODULE hDllModule, CString strProcName, PROC proc)
59
60
61
WaitForSingleObject(s_PluginMutex, INFINITE);
62
for(s_iter = s_Plugins.begin(); s_iter != s_Plugins.end(); s_iter++)
63
64
if((*s_iter)->m_PluginModule == hDllModule)
65
66
(*s_iter)->m_procs[strProcName] = proc;
67
return;
68
break;
}
69
70
71
72
ReleaseMutex(s_PluginMutex);
73
74
PROC Plugin::GetProc(HMODULE hDllModule, CString strProcName)
75
76
77
78
79
PROC ret = NULL;
80
if(s_iter == s_Plugins.end())
81
s_iter = s_Plugins.begin();
82
83
if((*s_iter)->m_procs[strProcName] == NULL || (*s_iter)->m_PluginModule == hDllModule)
86
continue;
87
88
return (*s_iter)->m_procs[strProcName];
89
ret = (*s_iter)->m_procs[strProcName];
90
91
92
93
return NULL;
94
95
96
return ret;
84
97
85
98
list<Plugin*>::iterator Plugin::GetHead()
99
45
map<CString, PROC> m_procs;
46
static list<Plugin*> s_Plugins;
47
static list<Plugin*>::iterator s_iter;
48
static HANDLE s_PluginMutex;
49
};
50
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
AssemblerOutput="1"
AssemblerListingLocation=""
WarningLevel="3"
Detect64BitPortabilityProblems="true"
51
DebugInformationFormat="4"
52
{{{{{{{{return;break;{{return (*s_iter)->m_procs[strProcName];ret = (*s_iter)->m_procs[strProcName];break;return NULL;ReleaseMutex(s_PluginMutex);return ret;