#ifdef _WIN32#include <intrin.h>#else#include <dlfcn.h>#endifstd::string GetModulePath() { std::string path; size_t index;#ifdef _WIN32 char cpath[MAX_PATH] = {0}; HMODULE hm = NULL; void* callerAddress = _ReturnAddress(); GetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)callerAddress, &hm); GetModuleFileNameA(hm, cpath, sizeof(cpath)); if (cpath[2] == '?') { path = std::string(cpath + 4); } else { path = cpath; } index = path.find_last_of('\\'); path.erase(index + 1);#else Dl_info dli; dladdr((void*)GetModulePath, &dli); path = dli.dli_fname; index = path.find_last_of('/');#endif path.erase(index + 1); return path;}