[英]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.