Почему Майки не добавили библиотеку WinApi в .net fx?
От: Разраб  
Дата: 31.08.23 07:19
Оценка:
Ведь вроде бы логично, FX конкретно был заточен под винду, по-моему это бы сильно добавило популярности фрэймворку.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Почему Майки не добавили библиотеку WinApi в .net fx?
От: karbofos42 Россия  
Дата: 31.08.23 11:19
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Ведь вроде бы логично, FX конкретно был заточен под винду, по-моему это бы сильно добавило популярности фрэймворку.


Если .NET FX — это .NET Framework, то там и так половина WinForms реализована через дёрганье WinAPI.
Вызвать функцию из WinAPI — это 2 строчки кода, DllImport вообще не сложно пишется и не составляет труда.
90% использования WinAPI функций у меня было вызвано багами и недоработками в WinForms и WPF.
Приходилось иногда опускаться на уровень ниже, чтобы что-то эдакое с окнами сделать.
Для чего в MS смогли и захотели — для этого есть объектные обёртки и WinAPI вручную дёргать не нужно.
Необходимость проваливаться на этот уровень — это скорее антиреклама.
Зачем мне брать C# и дёргать WinAPI, если я могу взять C++ и делать то же самое, но работать будет быстрее?
Re: Почему Майки не добавили библиотеку WinApi в .net fx?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 31.08.23 12:14
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Ведь вроде бы логично, 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 и как-то на него переводить народ.
Re[2]: Почему Майки не добавили библиотеку WinApi в .net fx?
От: Разраб  
Дата: 31.08.23 13:38
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Разраб, Вы писали:


Р>>Ведь вроде бы логично, FX конкретно был заточен под винду, по-моему это бы сильно добавило популярности фрэймворку.

МР>Как именно вы это себе представляете? И чего именно вам не хватает?
МР>Вы ведь это спросили с какой-то практической целью, а не ради "пофлудить"?

Ну основные User32 например. На pinvoke зачастую кривые примеры. да и время каждый раз тратить.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Почему Майки не добавили библиотеку WinApi в .net fx?
От: CRT  
Дата: 31.08.23 14:02
Оценка: 3 (1)
вот есть
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.

Re[3]: Почему Майки не добавили библиотеку WinApi в .net fx?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 31.08.23 14:29
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Ну основные User32 например. На pinvoke зачастую кривые примеры. да и время каждый раз тратить.

Например, что?
Если взять то перечисление окон, это вот ни разу не общеупотребимая вещь — разработчику прикладного ПО оно никуда не уперлось.
И ради чего тратить ресурсы на 1% того кому это надо (и кто без проблем найдет решение и так).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.