[英]Getting a pointer variable in a process by name using WinAPI
我不确定问题的标题有多清晰。 这是我想做的事情:
我有一个使用DLL库作为插件的过程。 这些库使用与关键节对象同步的函数。 我希望所有DLL函数都与同一个关键部分对象同步。 我考虑了以下问题:第一个DLL将初始化关键部分对象,其他DLL也将使用它,而不是初始化一个新的对象。 但是,如何获得指向第一个DLL的关键部分对象的指针?
我想到的一种解决方案是使用命名共享内存 ,然后将指向关键节对象的指针放在那里。 它可以工作,但感觉就像用火箭筒射击苍蝇。 有没有更简单,更惯用的方法来创建带有可检索指针的命名对象?
一个Dll应该负责关键部分对象的管理。 此dll可能还导出了要使用的函数。 该dll在加载期间应创建对象,并提供(导出)返回对象指针的函数。
使用命名的互斥锁。 您不必跨DLL边界传递它。 每个DLL可以单独调用CreateMutex()
,并指定相同的名称,并且每个DLL都会将自己的本地HANDLE
获取到内核中的同一互斥对象,从而允许彼此同步。 只要确保每个DLL使用互斥锁完成后都调用CloseHandle()
。 两者的最佳选择是在每个DLL的入口点函数中,例如:
HANDLE hMutex = NULL;
BOOL WINAPI DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
hMutex = CreateMutex(NULL, FALSE, TEXT("MySharedMutex"));
if (hMutex == NULL) return FALSE;
break;
case DLL_PROCESS_DETACH:
if (hMutex != NULL)
{
CloseHandle(hMutex);
hMutex = NULL;
}
break;
}
return TRUE;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.