Loads a native Windows assembly... right from your .NET embedded resources. Works on all modern .NET platforms.
Package | Version |
---|---|
Cross platform | |
Windows | |
Linux | Coming soon (see the Abstractions branch) |
MacOS | Coming soon (see the Abstractions branch) |
Loads unmanaged libraries right from your embedded resources! Works on Windows and Linux only, both on .NET Framework and .NET Core (and of course .NET 5.0+)
AssemblyResolve
event for users to manually handle it.glibc
.using MemoryModule;
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate int addNumberProc(int a, int b);
var asmBytes = File.ReadAllBytes($"SampleDLL.dll");
var asm = NativeAssembly.Load(asmBytes);
Console.WriteLine("Successfully loaded library.");
var addNumberFunc = asm.GetDelegate<addNumberProc>("addNumbers");
var rand = new Random();
int num1 = rand.Next(0, 20);
int num2 = rand.Next(0, 20);
Console.WriteLine($"{num1}+{num2}={addNumberFunc(num1, num2)}");
var greetFunc = asm.GetDelegate<GreetProc>("Greet");
greetFunc();
asm.Dispose();
See the DemoApp for more details.
MemoryModule.NET
, unlike other projects of the MemoryModule
family, aims to have a simple
design and a consistent interface across platforms. (see the
Abstractions
branch for an overview of the future of MemoryModule.NET
).
Therefore, features requiring a high amount of integration, like
TLS support (#34) or
Interoperability with native APIs (#42)
will not be included in MemoryModule.NET
in the foreseeable future.
However, MemoryModule.NET
should be able to bootstrap other native MemoryModule
s. For
example, C# applications targeting only Windows can enjoy the above features by bootstrapping
MemoryModulePP, as demonstrated in
this repo.
dll
files compiled using g++: https://github.com/fancycode/MemoryModule/issues/108. These files must be compiled using -static-libgcc
and -static-libstdc++
to load properly, in both the original C version and this version.libcurl
, can be properly loaded, MemoryModule.NET may not work with other advanced libraries that contain unknown ELF relocations. If that's the case, please open an issue.glibc
data structures, it may fail on systems that use beta/custom glibc
version. Please open an issue for support.This repo is a part of Project Reality.
Need help using this project? Join me on Discord, and let's find a solution together.