diff --git a/src/monodroid/jni/monodroid-glue.c b/src/monodroid/jni/monodroid-glue.c index b0e3390ddaf..57183905b96 100644 --- a/src/monodroid/jni/monodroid-glue.c +++ b/src/monodroid/jni/monodroid-glue.c @@ -45,6 +45,7 @@ #include #include #include +#include #endif #include @@ -535,6 +536,28 @@ get_xamarin_android_msbuild_path (void) return msbuild_folder_path; } +static char *libmonoandroid_directory_path = NULL; + +// Returns the directory in which this library was loaded from +static char* +get_libmonoandroid_directory_path () +{ + wchar_t module_path[MAX_PATH]; + HMODULE module = NULL; + + if (libmonoandroid_directory_path != NULL) + return libmonoandroid_directory_path; + + DWORD flags = GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT; + if (!GetModuleHandleExW (flags, (void*)&libmonoandroid_directory_path, &module)) + return NULL; + + GetModuleFileNameW (module, module_path, sizeof (module_path) / sizeof (module_path[0])); + PathRemoveFileSpecW (module_path); + libmonoandroid_directory_path = utf16_to_utf8 (module_path); + return libmonoandroid_directory_path; +} + static int setenv(const char *name, const char *value, int overwrite) { @@ -656,6 +679,10 @@ get_libmonosgen_path () return libmonoso; free (libmonoso); +#ifdef WINDOWS + TRY_LIBMONOSGEN (get_libmonoandroid_directory_path ()) +#endif + TRY_LIBMONOSGEN (SYSTEM_LIB_PATH) #ifdef RELEASE diff --git a/src/monodroid/monodroid.props b/src/monodroid/monodroid.props index 177c103081b..d2ee096fc28 100644 --- a/src/monodroid/monodroid.props +++ b/src/monodroid/monodroid.props @@ -7,7 +7,7 @@ <_HostUnixCFlags>$(_CommonCFlags) -Wa,--noexecstack <_HostUnixLdFlags>-Wall -lstdc++ -lz -shared -fpic <_HostCommonWinCFlags>$(_CommonCFlags) -DWINDOWS -DNTDDI_VERSION=NTDDI_VISTA -D_WIN32_WINNT=_WIN32_WINNT_VISTA -fomit-frame-pointer - <_HostCommonWinLdFlags>-Wall -lstdc++ -lz -shared -fpic -ldl -lmman -pthread -lwsock32 -lole32 -luuid + <_HostCommonWinLdFlags>-Wall -lstdc++ -lz -shared -fpic -ldl -lmman -pthread -lwsock32 -lole32 -luuid -lshlwapi <_UnixAdditionalSourceFiles>$(MonoSourceFullPath)\support\nl.c jni\debug.c jni\monodroid-networkinfo.c jni\xamarin_getifaddrs.c <_LinuxFlatPakBuild Condition="Exists('/.flatpak-info')" >-DLINUX_FLATPAK