Ведь вроде бы логично, FX конкретно был заточен под винду, по-моему это бы сильно добавило популярности фрэймворку.
Здравствуйте, Разраб, Вы писали:
Р>Ведь вроде бы логично, FX конкретно был заточен под винду, по-моему это бы сильно добавило популярности фрэймворку.
Как именно вы это себе представляете? И чего именно вам не хватает?
Вы ведь это спросили с какой-то практической целью, а не ради "пофлудить"?
Как написали в соседнем ответе Win32 GUI скрыт внутри WinForms.
Помимо этого, если посмотреть на базовые сервисы, то в том или ином виде в Framework доступны:
— файловые операции и работа с каталогами
— работа с сервисами
— работа с потоками/процессами и механизмы синхронизации
— разное из Security (сертификаты, API шифрования, аутентификации, управление правами доступа, ...)
— работа с сетью (сокеты, DNS, HTTP как на сервере, так и на клиенте)
— ...
На самом деле MS сделали практически прозрачный доступ к COM/DCOM/ActiveX, поэтому если API доступен через COM, достучатся до него проблем нет.
Ну и что касается WinAPI, то:
— он огромный
— он старый (многие вещи уже поддерживаются просто из совместимости) и тащить его весь не нужно никому
— в нем сменялись куча парадигм и одни части сделаны так, а другие иначе.
Самый простой пример — как возвращается ошибка. В одних функциях код ошибки приходит сразу через возвращаемое значение, в других возвращается специальное значение (типа InvalidHandle), а ошибка через глобальное GetLastError, в третьих возвращает BOOL, говорящий успешно было или нет.
А еще по-разному выделяется и освобождается память...
А еще есть всякие сложные структуры в которых передается или возвращается информация
— а еще он банально плохо ложится на объектный подход и чтобы не выглядет инородно, нужно приложить немало усилий.
В общем простого способа "запихнуть весь WinAPI в .Net" не просматривается.
А для отдельных потребностей (того, что не доступно через базовые классы Framework), когда нужно обратиться к чему-то точечно, есть
— готовые библиотеки от того же MS (типа того же Windows API Code Pack) или сторонние.
—
System.Runtime.InteropServices который очень облегчает работу и с COM, и с P/Invoke.
— есть
http://www.pinvoke.net/ и его производные
P.S. Ну как показала практика (и скорее всего об этом думали исходно, проектируя .Net), отсутствие такой привязки сделало пусть и сложной, но решаемой задачу выпуска "кроссплатформенного .Net".
А если бы изначально не было такого строго контроля, "метастазы" WinAPI расползлись бы по всему Framework, на него бы было завязано куча софта и никакой миграции было бы не возможно произвести — только проектировать новый Framework и как-то на него переводить народ.
вот есть
https://github.com/microsoft/cswin32
C#/Win32 P/Invoke Source Generator
A source generator to add a user-defined set of Win32 P/Invoke methods and supporting types to a C# project.