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 には、C:\Windows\System32\MyFile.dll のように、ロードされたばかりの DLL の完全な名前が含まれています。
Linux では、共有オブジェクト コンストラクターに引数は渡されません。
void `__attribute__` ((constructor)) on_load(void);
この場合、DLL の完全な名前を取得するにはどうすればよいですか? ソリューションが Mac でも動作する場合は、追加のクレジットが必要です。:-)