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

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

Изменено 06.06.2022 16:33 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 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

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