LoadLibrary refactoring (#20841)
* Refactor LoadLibrary Methods
This change refactors the code in DllImport in preparation
for implementing the new NativeLibrary API here:
dotnet/corefx#32015
The two main changes are:
1) A change in the semantics of the internal LoadLibrary helper functions.
When a native library is loaded, there are two categories of callers
expecting different return values:
External callers like AssemblyNative::InternalLoadUnmanagedDllFromPath()
and the upcoming System.Runtime.Interop.Marshall.LoadLibrary()
need the raw system handle
Internal callers like LoadLibraryModule() need the PAL registered handle
This change modifies the internal LoadLibraryModule* methods to work
in terms of native system handles, so that external callers can obrain
them directly. Methods requiring PAL-handles can register them explicitly.
There is no change in external signature of DllImport class, or the
native Dll cache in AppDomain class.
2) Differentiate HMODULE and NATIVE_LIBRARY_HANDLE
This change defines NATIVE_LIBRARY_HANDLE type to represent
raw system handles to native libraries that are not registered
with the PAL (On Unix systems).
The types on PAL and DlImport methods are adjusted to make
this semantic distinction explicit.
*
Fix loading LibC via PAL_LoadLibraryDirect()