コード例 #1
0
        private const int LoadWithAlteredSearchPathFlag = 0x8; /* LOAD_WITH_ALTERED_SEARCH_PATH */

        private static IntPtr LoadLibraryHelper(string libraryName, int flags, ref LoadLibErrorTracker errorTracker)
        {
            IntPtr hmod;

            if (((uint)flags & 0xFFFFFF00) != 0)
            {
                hmod = Interop.Kernel32.LoadLibraryEx(libraryName, IntPtr.Zero, (int)((uint)flags & 0xFFFFFF00));
                if (hmod != IntPtr.Zero)
                {
                    return(hmod);
                }

                int lastError = Marshal.GetLastWin32Error();
                if (lastError != Interop.Errors.ERROR_INVALID_PARAMETER)
                {
                    errorTracker.TrackErrorCode(lastError);
                    return(hmod);
                }
            }

            hmod = Interop.Kernel32.LoadLibraryEx(libraryName, IntPtr.Zero, flags & 0xFF);
            if (hmod == IntPtr.Zero)
            {
                errorTracker.TrackErrorCode(Marshal.GetLastWin32Error());
            }

            return(hmod);
        }
コード例 #2
0
        private static IntPtr LoadLibraryHelper(string libraryName, int flags, ref LoadLibErrorTracker errorTracker)
        {
#if PLATFORM_WINDOWS
            IntPtr ret = Interop.mincore.LoadLibraryEx(libraryName, IntPtr.Zero, flags);
            if (ret != IntPtr.Zero)
            {
                return(ret);
            }

            int lastError = Marshal.GetLastWin32Error();
            if (lastError != LoadLibErrorTracker.ERROR_INVALID_PARAMETER)
            {
                errorTracker.TrackErrorCode(lastError);
            }

            return(ret);
#else
            IntPtr ret = IntPtr.Zero;
            if (libraryName == null)
            {
                errorTracker.TrackErrorCode(LoadLibErrorTracker.ERROR_MOD_NOT_FOUND);
            }
            else if (libraryName == String.Empty)
            {
                errorTracker.TrackErrorCode(LoadLibErrorTracker.ERROR_INVALID_PARAMETER);
            }
            else
            {
                // TODO: FileDosToUnixPathA
                ret = Interop.Sys.LoadLibrary(libraryName);
                if (ret == IntPtr.Zero)
                {
                    errorTracker.TrackErrorCode(LoadLibErrorTracker.ERROR_MOD_NOT_FOUND);
                }
            }

            return(ret);
#endif
        }