Я понимаю, что в некоторых случаях 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();
}
}
Когда я ворвался в эту программу с помощью отладчика, я всегда вижу:
Учитывая, что не требуется маршалинг, который нужно сделать (правильно?), может кто-нибудь объяснить, что на самом деле происходит в этом "переход от перехода к родному", и почему это необходимо?