簡體   English   中英

使用WinAPI按名稱獲取進程中的指針變量

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM