Сообщение Re[12]: C#,Java, go - дико дорого от 06.06.2022 16:28
Изменено 06.06.2022 20:01 Serginio1
Re[12]: C#,Java, go - дико дорого
Здравствуйте, vaa, Вы писали:
S>> Ты пробовал?
vaa>Так точно!
Ну вот редиска ты!
Генерится нативная Microsoft.Interop.Tests.NativeExportsNE.dll библиотека размером 945 кб. Там еще 2 дополнительные Microsoft.Interop.Tests.NativeExports.dll и Microsoft.Interop.Ancillary.dll по 20 и 12 кб
Вызов из .Net такой
Там далеко не ПриветМир.
И еще куча классов для тестов.
Я так понимаю, что за компиляцию в Native отвечает DNNE
https://github.com/AaronRobinsonMSFT/DNNE
https://github.com/AaronRobinsonMSFT/DNNE/blob/master/src/msbuild/DNNE.props
Вот и верь тебе после этого!
S>> Ты пробовал?
vaa>Так точно!
Ну вот редиска ты!
Генерится нативная Microsoft.Interop.Tests.NativeExportsNE.dll библиотека размером 945 кб. Там еще 2 дополнительные Microsoft.Interop.Tests.NativeExports.dll и Microsoft.Interop.Ancillary.dll по 20 и 12 кб
Вызов из .Net такой
namespace Demo
{
internal static partial class NativeExportsNE
{
public const string NativeExportsNE_Binary = "Microsoft.Interop.Tests." + nameof(NativeExportsNE);
[LibraryImport(NativeExportsNE_Binary, EntryPoint = "sumi")]
public static partial int Sum(int a, int b);
[LibraryImport(NativeExportsNE_Binary, EntryPoint = "sumouti")]
public static partial void Sum(int a, int b, out int c);
[LibraryImport(NativeExportsNE_Binary, EntryPoint = "sumrefi")]
public static partial void Sum(int a, ref int b);
}
internal static class Program
{
public static void Main(string[] args)
{
int a = 12;
int b = 13;
int c = NativeExportsNE.Sum(a, b);
Console.WriteLine($"{a} + {b} = {c}");
c = 0;
NativeExportsNE.Sum(a, b, out c);
Console.WriteLine($"{a} + {b} = {c}");
c = b;
NativeExportsNE.Sum(a, ref c);
Console.WriteLine($"{a} + {b} = {c}");
}
}
}
Там далеко не ПриветМир.
namespace NativeExports
{
public static unsafe class Demo
{
[UnmanagedCallersOnly(EntryPoint = "sumi")]
public static int Sum(int a, int b)
{
return a + b;
}
[UnmanagedCallersOnly(EntryPoint = "sumouti")]
public static void SumOut(int a, int b, int* c)
{
*c = a + b;
}
[UnmanagedCallersOnly(EntryPoint = "sumrefi")]
public static void SumRef(int a, int* b)
{
*b += a;
}
}
}
И еще куча классов для тестов.
Я так понимаю, что за компиляцию в Native отвечает DNNE
https://github.com/AaronRobinsonMSFT/DNNE
https://github.com/AaronRobinsonMSFT/DNNE/blob/master/src/msbuild/DNNE.props
Вот и верь тебе после этого!
Re[12]: C#,Java, go - дико дорого
Здравствуйте, vaa, Вы писали:
S>> Ты пробовал?
vaa>Так точно!
Ну вот редиска ты!
Генерится нативная Microsoft.Interop.Tests.NativeExportsNE.dll библиотека размером 945 кб. Там еще 2 дополнительные Microsoft.Interop.Tests.NativeExports.dll и Microsoft.Interop.Ancillary.dll по 20 и 12 кб
Вызов из .Net такой
Там далеко не ПриветМир.
И еще куча классов для тестов.
например
Я так понимаю, что за компиляцию в Native отвечает DNNE
https://github.com/AaronRobinsonMSFT/DNNE
https://github.com/AaronRobinsonMSFT/DNNE/blob/master/src/msbuild/DNNE.props
Вот и верь тебе после этого!
S>> Ты пробовал?
vaa>Так точно!
Ну вот редиска ты!
Генерится нативная Microsoft.Interop.Tests.NativeExportsNE.dll библиотека размером 945 кб. Там еще 2 дополнительные Microsoft.Interop.Tests.NativeExports.dll и Microsoft.Interop.Ancillary.dll по 20 и 12 кб
Вызов из .Net такой
namespace Demo
{
internal static partial class NativeExportsNE
{
public const string NativeExportsNE_Binary = "Microsoft.Interop.Tests." + nameof(NativeExportsNE);
[LibraryImport(NativeExportsNE_Binary, EntryPoint = "sumi")]
public static partial int Sum(int a, int b);
[LibraryImport(NativeExportsNE_Binary, EntryPoint = "sumouti")]
public static partial void Sum(int a, int b, out int c);
[LibraryImport(NativeExportsNE_Binary, EntryPoint = "sumrefi")]
public static partial void Sum(int a, ref int b);
}
internal static class Program
{
public static void Main(string[] args)
{
int a = 12;
int b = 13;
int c = NativeExportsNE.Sum(a, b);
Console.WriteLine($"{a} + {b} = {c}");
c = 0;
NativeExportsNE.Sum(a, b, out c);
Console.WriteLine($"{a} + {b} = {c}");
c = b;
NativeExportsNE.Sum(a, ref c);
Console.WriteLine($"{a} + {b} = {c}");
}
}
}
Там далеко не ПриветМир.
namespace NativeExports
{
public static unsafe class Demo
{
[UnmanagedCallersOnly(EntryPoint = "sumi")]
public static int Sum(int a, int b)
{
return a + b;
}
[UnmanagedCallersOnly(EntryPoint = "sumouti")]
public static void SumOut(int a, int b, int* c)
{
*c = a + b;
}
[UnmanagedCallersOnly(EntryPoint = "sumrefi")]
public static void SumRef(int a, int* b)
{
*b += a;
}
}
}
И еще куча классов для тестов.
например
public static unsafe class DelegatesAndFunctionPointers
{
[UnmanagedCallersOnly(EntryPoint = "invoke_callback_after_gc")]
public static void InvokeCallbackAfterGCCollect(delegate* unmanaged<void> fptr)
{
// We are at the mercy of the GC to verify our delegate has been retain
// across the native function call. This is a best effort validation.
for (int i = 0; i < 5; ++i)
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
// If the corresponding Delegate was collected, the runtime will rudely abort.
fptr();
}
[UnmanagedCallersOnly(EntryPoint = "invoke_managed_callback_after_gc")]
public static void InvokeManagedCallbackAfterGCCollect(void* fptr)
{
// We are at the mercy of the GC to verify our delegate has been retain
// across the native function call. This is a best effort validation.
for (int i = 0; i < 5; ++i)
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
// If the corresponding Delegate was collected, the runtime will rudely abort.
((delegate*<void>)fptr)();
}
[UnmanagedCallersOnly(EntryPoint = "invoke_callback_blittable_args")]
public static int InvokeCallbackWithBlittableArgument(delegate* unmanaged<int, int, int> fptr, int a, int b)
{
return fptr(a, b);
}
[UnmanagedCallersOnly(EntryPoint = "invoke_managed_callback_blittable_args")]
public static int InvokeManagedCallbackWithBlittableArgument(void* fptr, int a, int b)
{
return ((delegate*<int, int, int>)fptr)(a, b);
}
}
Я так понимаю, что за компиляцию в Native отвечает DNNE
https://github.com/AaronRobinsonMSFT/DNNE
https://github.com/AaronRobinsonMSFT/DNNE/blob/master/src/msbuild/DNNE.props
Вот и верь тебе после этого!