GetModuleHandle(NULL)獲取當前DLL模塊基址?


做一項目想在DLL內部代碼實現獲取本DLL的模塊基址,而且不知道本DLL名稱

最簡單的方法是想到GetModuleHandle(NULL),是否可以呢?

參看http://blog.csdn.net/guzhou_diaoke/article/details/8826558到的答案是否

自己嘗試了一下:

DLL代碼(testDll):

復制代碼
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        {
            HMODULE hModule = GetModuleHandle(NULL);
            WCHAR wszhModule[MAX_PATH] = {0};
            swprintf_s(wszhModule, L"DLL里調用GetModuleHandle(NULL)獲取到的地址為:0x%x", \
                (DWORD)hModule);
            MessageBoxW(0, wszhModule, L"提示", 0);
        }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
復制代碼

EXE代碼(test):

int _tmain(int argc, _TCHAR* argv[])
{
    LoadLibrary(L"testDll");

    return 0;
}

得到的結果:

結論:

在DLL內部調用GetModuleHandle(NULL),獲取的是主模塊(EXE)基址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM