比如你想限制你的某个函数只能被自己某个特定的DLL调用。或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常。则可以用以下函数
void ShowCallerModuleName()
{
HMODULE hCallerModule = NULL;
TCHAR szModuleName[MAX_PATH] = _T("");
void* callerAddress = _ReturnAddress();
if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)callerAddress, &hCallerModule))
{
GetModuleFileName(hCallerModule, szModuleName, ARRAYSIZE(szModuleName));
MessageBox(NULL, szModuleName, _T("Who is calling me?"), MB_OK);
}
}
注:
使用GetModuleHandleEx需要使用FreeLibrary(hCallerModule);释放