Я понимаю, что в некоторых случаях CLR необходимо выполнять маршалинг, но, допустим, у меня есть:
using System.Runtime.InteropServices;
using System.Security;
[SuppressUnmanagedCodeSecurity]
static class Program
{
[DllImport("kernel32.dll", SetLastError = false)]
static extern int GetVersion();
static void Main()
{
for (; ; )
GetVersion();
}
}
Когда я врываюсь в эту программу с помощью отладчика, я всегда вижу:
Учитывая, что там Нет необходимости в маршалинге (верно?), не мог бы кто-нибудь объяснить, что на самом деле происходит в этом «переходе с управляемого на собственный» и почему это необходимо?