Почему требуется «внутренний статический внешний вид»?
Модификатор internal
просто устанавливает видимость вашего метода. Это не обязательно должно быть internal
, поэтому вы можете объявить метод private
или public
по своему усмотрению и так же, как и любой другой стандартный метод.
Модификатор static
необходим, потому что это не метод экземпляра и этот метод не знает никакого класса (у него нет указателя this
).
Наконец, extern
требуется, чтобы сообщить компилятору, что метод реализован не здесь, а в другом месте (и вы укажете, где, используя атрибуты). Метод Evey extern
тоже должен быть объявлен static
(поскольку это простой вызов функции без каких-либо знаний об объектах).
Что такое SetLastError?
Это указывает на то, что метод может изменить значение кода последней ошибки потока. См. GetLastError()
. для получения подробной информации об этом. Если вызываемая функция изменит это значение, рекомендуется установить SetLastError
на true
из MSDN:
Упаковщик времени выполнения вызывает GetLastError и кэширует возвращенное значение, чтобы предотвратить его перезапись другими вызовами API. Вы можете получить код ошибки, вызвав GetLastWin32Error.
Короче говоря, он сохраняет значение, возвращаемое GetLastError(), во внутренний кеш, поэтому любой другой вызов системного API (даже внутренний для других функций фреймворка) не перезапишет это значение.
Почему LayoutKind.Sequential?
Макет класса в .NET не обязательно должен быть последовательным в памяти (последовательный = если A
объявлен до B
, тогда макет памяти имеет A
перед B
). Это неверно в C, где порядок объявления имеет значение (объявление используется компилятором для понимания расположения в памяти необработанных данных). Если вам нужно взаимодействовать с функциями C, вы должны быть уверены в расположении данных, которые вы им передаете. Вот как работает LayoutKind.Sequential
: он указывает компилятору соблюдать последовательный порядок объявления данных в struct
. Это не единственный вариант взаимодействия с неуправляемым миром, вы даже можете явно задать смещение (от начала структуры) каждого поля (см. LayoutKind.Explicit).
person
Adriano Repetti
schedule
10.10.2012