Если у меня есть dll с именем "foo.dll" и конечный пользователь переименует ее в "bar.dll". После вызова LoadLibrary, как я могу получить имя "bar.dll" внутри моей DLL?
Это GetModuleFileName (hModule, буфер);
да, вам нужно хранить hModule в DllMain
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: hModule = hinstDLL; break; } }
Вам необходимо предоставить функцию DllMain , сохранить дескриптор модуля, который вы получили, в статической переменной, а затем использовать эту переменную для вызова GetModuleFilename . Вы должны избегать вызова GetModuleFilename (или любой другой функции) в самом DllMain, поскольку Windows очень требовательна к тому, что вы можете и не можете делать там.