Что именно происходит во время «перехода с управляемого на собственный»?

Я понимаю, что в некоторых случаях 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();
    }
}

Когда я врываюсь в эту программу с помощью отладчика, я всегда вижу:

Учитывая, что там Нет необходимости в маршалинге (верно?), не мог бы кто-нибудь объяснить, что на самом деле происходит в этом «переходе с управляемого на собственный» и почему это необходимо?

22
задан Mehrdad 8 February 2012 в 21:08
поделиться