【发布时间】:2009-05-17 11:31:48
【问题描述】:
如果我有一个名为“foo.dll”的 dll,最终用户将其重命名为“bar.dll”。调用 LoadLibrary 后,如何从我的 dll 中获取名称“bar.dll”?
是GetModuleFileName(hModule, buffer); ?
【问题讨论】:
如果我有一个名为“foo.dll”的 dll,最终用户将其重命名为“bar.dll”。调用 LoadLibrary 后,如何从我的 dll 中获取名称“bar.dll”?
是GetModuleFileName(hModule, buffer); ?
【问题讨论】:
是的,您需要将 hModule 存储在 DllMain
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
hModule = hinstDLL;
break;
}
}
【讨论】:
您需要提供DllMain 函数,将您传递的模块句柄存储在静态变量中,然后使用该变量调用GetModuleFilename。您应该避免在 DllMain 本身中调用 GetModuleFilename(或任何其他函数),因为 Windows 对您在其中可以做什么和不可以做什么非常挑剔。
【讨论】: