在 Windows 上,有几个参数被传递给 DllMain 构造函数:
BOOL WINAPI DllMain(
__in HINSTANCE hinstDLL,
__in DWORD fdwReason,
__in LPVOID lpvReserved
);
从 hinstDLL 我可以使用 GetModuleFileName() 获取 DLL 本身的完全限定文件名:
LPTSTR str = new TCHAR[256];
int libNameLength = GetModuleFileName(hinstDLL, str, 256);
delete[] str;
在上面的示例中,str 现在包含刚刚加载的 DLL 的全名,例如 C:\Windows\System32\MyFile.dll。
在 Linux 上,没有参数传递给共享对象构造函数:
void `__attribute__` ((constructor)) on_load(void);
在这种情况下,如何获取 DLL 的全名?如果您的解决方案也适用于 Mac,则额外加分。:-)