Это действительно легко, но нужно подумать заранее:
Первое, что нужно сделать, это реализовать DllMain
в собственной DLL, которая будет кэшировать дескриптор модуля при загрузке DLL. Это выглядит так:
EXTERN_C BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_opt_ LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
g_Handle = hinstDLL;
}
return TRUE;
}
Позже, когда вы хотите получить имя, просто позвоните GetModuleFileName
, вот так:
TCHAR dllName[MAX_PATH + 1];
GetModuleFileName(g_Handle, dllName, MAX_PATH);
Единственная сложная часть, если вы хотите так ее назвать, - это сохранение дескриптора из DllMain. Вызов GetModuleHandle(NULL)
даст вам дескриптор исполняемого модуля, а не DLL (такой же, как GetExecutingAssembly
в C #).