You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
using System.Reflection; |
|
using System.Runtime.InteropServices; |
|
|
|
namespace Bit.RustSDK; |
|
|
|
public static partial class NativeMethods |
|
{ |
|
// https://docs.microsoft.com/en-us/dotnet/standard/native-interop/cross-platform |
|
// Library path will search |
|
// win => __DllName, __DllName.dll |
|
// linux, osx => __DllName.so, __DllName.dylib |
|
|
|
static NativeMethods() |
|
{ |
|
NativeLibrary.SetDllImportResolver(typeof(NativeMethods).Assembly, DllImportResolver); |
|
} |
|
|
|
static IntPtr DllImportResolver(string libraryName, Assembly assembly, DllImportSearchPath? searchPath) |
|
{ |
|
if (libraryName != __DllName) return IntPtr.Zero; |
|
|
|
var path = "runtimes/"; |
|
var extension = ""; |
|
|
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) |
|
{ |
|
path += "win-"; |
|
extension = ".dll"; |
|
} |
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) |
|
{ |
|
path += "osx-"; |
|
extension = ".dylib"; |
|
} |
|
else |
|
{ |
|
path += "linux-"; |
|
extension = ".so"; |
|
} |
|
|
|
if (RuntimeInformation.ProcessArchitecture == Architecture.X86) |
|
{ |
|
path += "x86"; |
|
} |
|
else if (RuntimeInformation.ProcessArchitecture == Architecture.X64) |
|
{ |
|
path += "x64"; |
|
} |
|
else if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64) |
|
{ |
|
path += "arm64"; |
|
} |
|
|
|
path += "/native/" + __DllName + extension; |
|
|
|
return NativeLibrary.Load(Path.Combine(AppContext.BaseDirectory, path), assembly, searchPath); |
|
} |
|
}
|
|
|