Информация об изменениях

Сообщение Re[12]: C#,Java, go - дико дорого от 06.06.2022 16:28

Изменено 06.06.2022 19:57 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 такой

namespace Demo
{
    internal static unsafe partial class NativeExportsNE
    {
        [System.Runtime.InteropServices.DllImportAttribute("Microsoft.Interop.Tests.NativeExportsNE", EntryPoint = "sumi", ExactSpelling = true)]
        public static extern partial int Sum(int a, int b);
    }
}
namespace Demo
{
    internal static unsafe partial class NativeExportsNE
    {
        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Interop.LibraryImportGenerator", "42.42.42.42")]
        [System.Runtime.CompilerServices.SkipLocalsInitAttribute]
        public static partial void Sum(int a, int b, out int c)
        {
            System.Runtime.CompilerServices.Unsafe.SkipInit(out c);
            // Pin - Pin data in preparation for calling the P/Invoke.
            fixed (int* __c_native = &c)
            {
                __PInvoke(a, b, __c_native);
            }

            // Local P/Invoke
            [System.Runtime.InteropServices.DllImportAttribute("Microsoft.Interop.Tests.NativeExportsNE", EntryPoint = "sumouti", ExactSpelling = true)]
            static extern unsafe void __PInvoke(int a, int b, int* c);
        }
    }
}
namespace Demo
{
    internal static unsafe partial class NativeExportsNE
    {
        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Interop.LibraryImportGenerator", "42.42.42.42")]
        [System.Runtime.CompilerServices.SkipLocalsInitAttribute]
        public static partial void Sum(int a, ref int b)
        {
            // Pin - Pin data in preparation for calling the P/Invoke.
            fixed (int* __b_native = &b)
            {
                __PInvoke(a, __b_native);
            }

            // Local P/Invoke
            [System.Runtime.InteropServices.DllImportAttribute("Microsoft.Interop.Tests.NativeExportsNE", EntryPoint = "sumrefi", ExactSpelling = true)]
            static extern unsafe void __PInvoke(int a, int* b);
        }
    }
}


Там далеко не ПриветМир.
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 такой

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

Вот и верь тебе после этого!