Взаимодействие на уровне машинного кода
В следующих статьях показаны различные способы взаимодействия на уровне машинного кода в .NET.
Для обращения к машинному коду может быть несколько причин:
- Операционные системы включают большой объем API-интерфейсов, отсутствующих в управляемых библиотеках классов. Яркий пример такого сценария — доступ к функциям управления оборудованием или операционной системой.
- Взаимодействие с другими компонентами, имеющими или способными создавать ABI в стиле C (ABI машинного кода), например код Java, предоставляемый с помощью Java Native Interface (JNI), или любой другой управляемый язык, способный создавать компоненты машинного кода.
- Большая часть устанавливаемого программного обеспечения Windows, например пакет Microsoft Office, регистрирует COM-компоненты, которые представляют свои программы и позволяют разработчикам автоматизировать или использовать их. Для этого также требуется взаимодействие на уровне машинного кода.
Приведенный список охватывает не все возможные ситуации и сценарии, в которых разработчику может потребоваться взаимодействие с компонентами машинного кода. Например, библиотека классов .NET использует поддержку взаимодействия на уровне машинного кода для реализации значительного количества своих API, таких как поддержка и использование консоли, доступ к файловой системе и др. Однако важно помнить, что при необходимости такая возможность существует.
Примечание
Большинство примеров в этом разделе приводятся для всех трех поддерживаемых платформ .NET Core (Windows, Linux и macOS). Но для краткости и наглядности приведен лишь один пример, использующий имена и расширения файлов Windows ("dll" для библиотек). Это сделано исключительно ради удобства и не означает, что на Linux и macOS такие функции недоступны.