M examples/csharp-dllexport/DllExportInjector/Program.cs => examples/csharp-dllexport/DllExportInjector/Program.cs +24 -0
@@ 39,6 39,20 @@ namespace DllExportInjector
public int Second;
}
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct CalculationResult
+ {
+ [MarshalAs(UnmanagedType.I4)]
+ public int Addition;
+ [MarshalAs(UnmanagedType.I4)]
+ public int Subtraction;
+ [MarshalAs(UnmanagedType.I4)]
+ public int Multiply;
+ [MarshalAs(UnmanagedType.I4)]
+ public int Divide;
+ }
+
+
static void Main(string[] args)
{
Console.WriteLine("Welcome to CsharpInjector demo for DllExport library");
@@ 100,6 114,16 @@ namespace DllExportInjector
Number = 1000
});
+ // Get result struct
+ result = injectedModule.ExecuteFunction("Calc", new AddParams
+ {
+ First = 15,
+ Second = 5
+ });
+ CalculationResult calculationResult = result.To<CalculationResult>();
+
+ bool freed = result.To<bool>();
+
injectedModule.Process.Close();
Console.ReadLine();
}
M examples/csharp-dllexport/DllExportLibrary/Export.cs => examples/csharp-dllexport/DllExportLibrary/Export.cs +25 -1
@@ 17,7 17,19 @@ namespace DllExportLibrary
public byte* Param;
public int Number;
}
-
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public class CalculationResult
+ {
+ public int Addition;
+ [MarshalAs(UnmanagedType.I4)]
+ public int Subtraction;
+ [MarshalAs(UnmanagedType.I4)]
+ public int Multiply;
+ [MarshalAs(UnmanagedType.I4)]
+ public int Divide;
+ }
+
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class AddParams
@@ 65,6 77,18 @@ namespace DllExportLibrary
}
[DllExport]
+ public static CalculationResult Calc(AddParams pars)
+ {
+ return new CalculationResult
+ {
+ Addition = pars.First + pars.Second,
+ Divide = pars.First / pars.Second,
+ Multiply = pars.First * pars.Second,
+ Subtraction = pars.First - pars.Second,
+ };
+ }
+
+ [DllExport]
public static int Add(AddParams pars)
{
Console.WriteLine($"Performing addition of numbers {pars.First} and {pars.Second}");