Насколько релевантно программирование Win32 для современных профессионалов?

Будучи большим поклонником книг Чарльза Петцольда « Кодекс» и «Аннотированный Тьюринг», я наткнулся на его книгу « Программирование Windows», которая учит программированию Win32 на C. Я студент-новичок в области компьютерных наук, который сначала научился C, но сейчас я использую программы C # и .NET для Windows , поэтому мне было интересно, будет ли Win32 по-прежнему относиться к профессиональным программам Windows. Будет ли это для меня, как студента, который хочет запрограммировать приложения Windows, изучить Win32 API до глубины, на которой распространяется книга?

Это зависит от того, какие приложения вы хотите развивать. В большинстве случаев в наши дни C # и .NET вполне подходят. Тем не менее, есть определенные типы приложений, для которых требуется как можно меньше зависимостей (расширения оболочки), которые не являются практичными для приложений .NET. Для тех, кому понадобится Win32.

Как всегда, он имеет хотя бы базовое понимание Win32, даже если вы используете .NET для большей части своей работы.

Я полностью согласен с тем, что пишет Джоэл Спольский в одной из своих многочисленных статей . Я думаю, что очень важно знать нижние уровни машины, чтобы не только писать качественный код, но и решать проблемы, которые неизбежно появятся.

Итак, да, важно хотя бы знать основы WIN32 API, возможно, не в глубине, но, по крайней мере, знать, что это есть, в основе всего, что вы будете кодировать.

Это очень актуально, если вы пишете C # в Windows. Не все функции Win32 были открыты через библиотеки .Net. Конкретным примером этого является метод сообщения WM_SETREDRAW, который я описываю здесь: WM_SETREDRAW . Это также необходимо в другое время для проблем с контрольным фокусом.

Кроме того, понимание того, как работают Win32 и Windows, даст вам лучшее представление о различных аспектах C # /. Net, таких как:

  • Что делает Control.Invoke () на самом деле?
  • В чем разница между Control.BeginInvoke и Control.Invoke?
  • Что на самом деле вызывает события моего элемента управления, например OnClick и т. Д., И как я могу его отладить.

Тем не менее WPF меняет все это, и если вы пишете только код .Net 3 / 3.5, то мой аргумент теряет свою актуальность.

По-моему, нет. Я узнал это давно, так что вам не придется!

Я думаю, что здорово, что сначала вы научились C, и я продолжал писать программы C, но я не понимаю, почему API win32 был бы полезен для поиска. Честно говоря, это был большой беспорядок.

Я думаю, что важно изучить основы. Если вы узнали достаточно, чтобы отобразить окно с некоторыми полями, некоторые кнопки и меню. Возможно, рисуем что-то в отдельном окне. Это поможет вам изучить основы того, как Windows действительно работает. Я считаю, что понимание цикла сообщений и осознание того, что почти все, что вы видите, является окном, – это фундаментальные вещи, которые каждый должен знать. Мои глаза были действительно открыты в первый раз, когда я понял, что кнопка – это собственное окно. Затем он помогает понять, что функции могут включаться и выключаться, отправляя эти сообщения Windows. Подclassирование окон позволит вам получить доступ к функциям, не подверженным вам в таких вещах, как .NET или VB Classic, и давайте вам расширить функциональность windows.

Я действительно не думаю, что «изучение Win32 API» реалистично для всех. API (да, их больше одного) огромны, и вам вряд ли когда-либо понадобится знать их все подробно. Я бы рекомендовал прочитать некоторые основы (например, создание windows, обмен сообщениями с windowsми, оконные процедуры, возможно, некоторые GDI и т. Д.) И использование MSDN для поиска остального, когда вам это нужно.

Определенно изучите основы, о которых говорит AlexDrenea. Пока .NET защищает вас от множества вызовов API Win32. Win32 API настолько огромен, что вы должны столкнуться с ситуациями, когда .NET не завербовал его для вас.

Обычная ситуация в реальной жизни сортирует стрелки на ListViewColumns

Согласно комментарию Грега, это в какой-то степени зависит от домена. Я делаю много программ для Windows CE / mobile, где .NET слишком запутан для многих устройств, а другие среды, такие как MFC, не полностью реализованы. В этом контексте большая часть Win32 все еще очень актуальна.

Тем не менее, я бы не стал изучать все это заранее, я просто изучал основы и выкапывал остальных, когда мне это нужно. Документация и примеры там достаточно хороши для этого подхода, а также интерактивная справка, доступная из таких сообществ.

Если вам не нужны какие-либо функции, которых нет в .NET Framework (например, получение подробной информации о драйверах принтера), нет. Это около 99% (конечно, произвольное значение, которое я только что составил) того, что вы будете делать.

Даже если вы использовали Win32, а не .NET, действительно ли нужно изучать ту же глубину, что и книга? Просмотрите разделы, узнайте, что если вы столкнетесь с какой-либо проблемой в будущем, вы знаете, где ее искать. Тогда остановитесь. Пойдите в глубину, когда вам это нужно или у вас есть свободное время.

Если вы пытаетесь решить проблемы с бизнесом, тогда есть более эффективные инструменты, чем C для программирования Win32-систем. Clarion. Delphi. И другие я не сомневаюсь.

Но я предполагаю, что для того, чтобы узнать, как все работает, вы в хорошем положении с C.

Я думаю, что на это уже был дан ответ, но если вы создаете .NET 2.0 или что-то winforms в .NET, вы обязательно столкнетесь с множеством проблем с тем, как некоторые части фреймворка обертывают win32 и mfc, и вам нужно будет копаться в этом, чтобы на самом деле получить материал, который будет работать по назначению.

Я все еще зарабатываю часть своих денег. У нас есть C IDE, основанная на WinAPI. Это сейчас около 15 лет или около того, и все еще работает ;-). Полная загрузка составляет около 5 МБ, потому что вы ничего не получаете в мире .NET. Так что для нас это еще ценная вещь …

Некоторые вещи не могут быть сделаны без вызовов win api, но с каждой версией .net эти вещи становятся все меньше и меньше, поэтому я не узнаю выигрыш api, если я где вы ..

Вы должны знать, что он существует, поскольку большинство собственных функций более «продвинутого» управляемого языка в конечном итоге называют их.

Кроме того, он может быть инкапсулирован в языках сценариев, таких как DllCall с DllCall

Это много раз обсуждалось в Professional Win32 api Newsgroup (news: //comp.os.ms-windows.programmer.win32)

(величайшие гуру и бестселлеры авторов (Петцольд, Руссинович и др.) в мире …)