Подтвердить что ты не робот

Изучает ли интерфейс win32 API?

Я был уверен, что кто-то конкретно задал этот вопрос, но из того, что я вижу, никто не имеет (возник вопрос о обучении win32, но это не так 't охватывают, стоит ли это делать).

Мне очень интересно получить более глубокое понимание всех систем, которые я использую (в основном я программирую на С#, по крайней мере профессионально), поэтому я очень просто хотел узнать, стоит ли выигрывать win32, или это слишком сложно? Я трачу свое время? Знаю ли я, что я выиграю?


Похожие/связанные вопросы по StackOverflow:

Имеет ли смысл изучать низкоуровневое программное обеспечение WinAPI? Насколько релевантно программирование Win32 для современных профессионалов?

4b9b3361

Ответ 1

Наличие практических знаний о том, как работает Win32 на самом низком уровне, безусловно, будет иметь неоценимое значение, если вы планируете заняться разработкой Windows в будущем. Он дает вам представление о таких вещах, как Windows, Messaging и GDI, которые скрываются к тому времени, когда вы переходите на уровень .NET.

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

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

Ответ 2

Я выступаю за изучение концепций при программировании окон низкого уровня, если все из них верны.

  • Вы собираетесь делать любое программирование окон.
  • Вы хотите быть парнем "пойти", когда произойдет необъяснимое.
  • Вы любите учиться.

Уровни абстракции, такие как работа .NET, создают и позволяют разработчикам делать невероятные вещи, не зная многого. Тем не менее, когда .NET используется таким образом, который непредсказуем его авторами, который раскрывает один из его тонких ошибок, тогда это время, когда некоторые знания API Win32 проходят долгий путь.

Будете ли вы когда-нибудь писать насос сообщений? Я сомневаюсь в этом. Может ли это помочь диагностировать проблемы? Ты дочери!

Ответ 3

Вопрос очень похож: "Является ли обучение сборкой стоящим"; и ответ один и тот же:

"Да, потому что вы поймете основы и сможете воспринимать глубже тех, кто работает только на верхнем уровне абстракции".

Однако, тем не менее, вы, вероятно, не будете писать Win32 API напрямую в 99,5% случаев.

Ответ 4

Когда они изобрели C, чтобы заменить язык ассемблера, люди, которые, вероятно, спрашивают: "Стоит ли изучать язык ассемблера?" Ценность в знании обоих была возможность отказаться от сборки, чтобы делать вещи, которые невозможно выполнить в C (например, вызвать прерывание).

То же самое можно сказать и для Win32. Есть некоторые вещи, которые невозможно сделать в С#. Если вы не знали win32 api, то вы отклонили бы некоторые вещи как невозможные. Однако, как только вы узнаете, чего вам не хватает, в этих редких ситуациях вы сможете "упасть на win32" и сделать их.

Еще один способ взглянуть на это - это программирование - это возможность думать одновременно на нескольких уровнях абстракции. Например, если вы знаете, что ваш язык использует неизменяемые строки, вы не пишете алгоритм, который добавляет один символ к одному 10000 раз, потому что он будет медленным. Если вы знаете win32 api, вы сможете подумать о том, как каждая строка, которую вы пишете на С#, действительно реализована, и это поможет вам лучше писать код.

Ответ 5

По крайней мере, для меня, изучая API (я предполагаю, что подразумевается "глубина" ), которую я не использую, это пустая трата времени. Я бы предпочел потратить свое ограниченное количество времени и силы ума, изучая новые концепции или изучая новые инструменты, чем знакомство с существующим инструментом, который мне теперь не нужно использовать. Когда мне нужен конкретный инструмент, который у меня нет или должен использовать инструмент, с которым я не знаком, это время, чтобы изучить его на некоторой глубине. До этого я мог бы сделать достаточно исследований, чтобы узнать, будет ли это полезно для меня или нет, но не намного больше.

Ответ 6

Да, принципы Win32 API полезны для изучения - эти принципы являются основой, на которой построено все остальное.

API-интерфейсы .NET для разработки графического интерфейса, как Windows.Forms, так и WPF, выполняют то, что они делают в рамках ограничений того, что возможно поверх API Win32. Основные архитектурные решения этих фреймворков были ограничены и проинформированы Win32 API.

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

BTW, то же самое относится и к другим технологиям, а также к созданию сетей, криптографии и аппаратного дизайна. Изучение основ поможет вам стать лучшим разработчиком.

Ответ 7

Да, вы должны изучить основы того, как работает Windows (большая часть этого материала предшествует Win32). Зачем? По той же причине, насколько я понимаю, как работает паз и шов, хотя я не занимаюсь изготовлением собственной мебели или почему я понимаю, как работает двигатель внутреннего сгорания, хотя я не занимаюсь ремонтом собственного автомобиля.

Вы работаете на более высоком уровне абстракции, что приятно, но когда теряет абстракции - это не "если", что "когда" - если вы не понимаете основы Windows, вы будете потеряны. Если вы не знаете, по крайней мере, некоторые из API, у вас не будет подсказки, где искать, если вам нужна функция P/Invoke, недоступная в .Net.

В дополнение к этому, не слишком ли любопытная причина?

Ответ 8

Если вы пытаетесь написать приложение VB6, то Win32 API позволяет вам делать много вещей, которые не поддерживаются VB6.

Если вы пишете приложение С# WinForms, я бы рекомендовал сначала изучить обширные области .NET Framework.

Изменить

Если вы действительно хотите узнать, что происходит под капотом в Windows, вам может потребоваться проверить копию Программирование Windows 3.1 Чарльзом Петцольдом.

Ответ 9

Я лично думаю, что все еще стоит изучить API Win32.

Насколько я помню, когда я начал изучать Win32 (после некоторого изучения VB (A), Pascal и т.д.), Я многое узнал о Windows и понял, как все работает в Windows. Все было так понятнее. :)

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

Ответ 10

Я не буду повторять снова и снова то, что другие говорили уже много раз.

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

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

Ответ 11

Вы никогда не сможете просто "изучить" весь API win32, это слишком много, чтобы принять его, и это будет движущаяся цель. Если вы развиваетесь в С#, нет реальной точки.

Тем не менее, попробуйте создать Notepad, используя простые C и просто вызовы API. Это научит вас достаточно для разработчика С#, чтобы хотя бы оценить его.

Ответ 12

Если бы я начал сегодня, я бы не стал изучать весь API. Однако я считаю, что основные понятия важны для понимания, с пониманием того, как потоки сообщений работают как главный приоритет.

Ответ 13

Многие ответы "Нет" здесь, похоже, сосредоточены на изучении реальных методов, структур и того, что не доступно в API. Я бы сказал, да, но не сосредоточен на отдельных компонентах API, а на общем дизайне и том, как он функционирует. Намного проще устранить даже код .NET, когда вы понимаете, что происходит на основном уровне операционной системы.

Ответ 14

Этот вопрос немного устарел, но я все равно отвечу.

Ответ: Сложно: да. Простой: возможно, не нужен.

Это действительно зависит от того, что вам нужно сделать. Если вам нужно использовать функцию, не поддерживаемую .NET, у вас есть. Но будьте осторожны, большая часть трещин Framework обеспечивает Win32, а если вы делаете что-то невероятно глупо, ваша машина будет bluescreen.

Я знаю, когда .NET впервые появился, у меня не было никакого интереса изучать Win32,.NET был здесь, и это было такое улучшение. Но печальный факт о Windows таков: все новые функции в Windows реализованы в собственном коде сначала, в течение периода. Если вы хотите использовать любую часть Windows до того, как .NET обернет ее, вы используете Win32 с С++ или Win32 с С# или с VB.NET..NET - это оболочка для всех вещей в Win32. Поэтому, если вы не можете ждать, да, вы можете вмешаться в нижние кишки ОС, если хотите.

Зная Win32 и, возможно, в один прекрасный день Win64 (независимо от того, что они называют) всегда будет полезным навыком. Любая технология whizzbang требует подкрепления где-то.

Ответ 15

.NET реализован с использованием win32 api, любой желающий иметь более глубокое понимание .NET значительно выиграет от наличия по крайней мере маргинального знания win32api.

Ответ 16

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

Рано или поздно вам придется интегрироваться со старым кодом, написанным на Win32 и C/С++. В этом случае знание Win32 поможет, особенно если вы интегрируете с помощью PInvoke или С++/CLI.

Ответ 17

Неправильное использование платформы .NET и Win32, и ваш компьютер будет синим экраном? Почему-то я сомневаюсь в этом.

Самое большое значение для знания Win32 (или языка ассемблера) заключается в том, что когда что-то не работает должным образом, и вы должны его отлаживать. Чем больше вы знаете о базовой системе, тем легче вам будет отлаживать проблему.

Ответ 18

Мне нравится еще больше добавлять к этому. Я никогда официально не изучал API Win32/MFC. Я начал использовать Visual С++ 4, когда я впервые интересовался программированием графического интерфейса. Во всяком случае, я бы хотел, чтобы я сохранил этот фундамент, так как я никогда не хватался на достаточно быстро (я был довольно молод, на самом деле), поэтому вместо этого изучил Visual Basic.

По какой-то причине Delphi никогда меня не интересовал, хотя я знал Паскаля достаточно хорошо, но я отвлекаюсь. В наши дни я работаю в сфере ИТ и разрабатываю сценарии установки в NSIS - и каждый раз мне часто нужны дополнительные функции, которые NSIS не предоставляет, поэтому я создаю свой собственный плагин и сохраняю его быстрым и зависимым, я выбираю, чтобы Win32 API выступал против в MFC или даже с полномасштабным С++.

Основная причина этого комментария заключается в том, что мое любопытство заставило меня зацепиться. Мне нравится больше узнать, так где лучший ресурс для изучения API. Книга? Веб-сайт?

Будет ли MFC по-прежнему стоить решения? Я видел сайт о коллеге, который разрабатывает графические приложения Win32, в сборке! Я думаю, что это чересчур, честно говоря, но это компактный, быстрый код, интересный, концепция, но я никогда не мог получить сборку 80х86 (черт возьми, даже сборку RISC в колледже я никогда не мог!)

Ответ 19

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

Программное обеспечение не является волшебным - ну... нормально... для 99% случаев: -)

Вот ссылка на отличную статью о "магическом мышлении" и "GUID goblins" от Эрика Липперта по этому вопросу: It not Magic