Каковы отношения между C и Windows API?

Я посмотрел на некоторые другие вопросы на ТАК и не ясный, если c создается сверху, под, или вместе с WINAPI. Как, например, кто-то мог записать что-то в чистом c, который смог открыть окно, или они должны были бы использовать API окон?

Я заметил общие черты между c (библиотека?) версия открытия файла (fopen) по сравнению с версией окон API (CreateFile), который заставляет меня задаться вопросом, являетесь ли Вы просто оберткой для другого. Кто-либо знает?

Если окна работают; программист вынужден к программе с помощью API окон для получения чего-то работающего на нем, или разве программист не может использовать API окон вообще и непосредственно получить доступ к аппаратным средствам (т.е. операционная система Windows защищает доступ к аппаратным средствам)?

Который является более портативным между различными версиями окон окон ce. Документация, которую я нашел (который теперь изменился) раньше говорила, что CreateFile только возвращается к версии 2.0 окон ce (здесь: http://msdn.microsoft.com/en-us/library/ms959950.aspx - Уведомление примечание по ссылке в самой нижней части, которая показывает информацию о поддерживаемой версии, было изменено). Таким образом, что каждый, как предполагается, использует для окон ce версию 1? Другими словами, программирование использует функции c, или функции маркировали WINAPI более вероятно для работы над всеми версиями окон CE?

Я считал следующее в книге о программировании окон ce, и это смутило меня, таким образом, все вышеупомянутые вопросы могут быть поняты лучше в контексте понимания следующего:

Windows CE поддерживает большинство тех же функций файлового ввода-вывода, найденных на Windows NT и Windows 98. Те же вызовы API Win32, такие как CreateFile, ReadFile, WriteFile и CloseFile, все поддерживаются. Программист Windows CE должен знать о нескольких различиях, как бы то ни было. В первую очередь, стандарт C функции файлового ввода-вывода, такие как fopen, освобожденный, и fprintf, не поддерживается под Windows CE. Аналогично, старые стандарты Win16, _lread, _lwrite, и _llseek, не поддерживаются. Это не действительно огромная проблема, потому что все эти функции могут легко быть реализованы путем обертывания функций файла Windows CE с небольшим объемом кода.

Мое понимание обертывания - то, что у Вас должно быть что-то для обертывания, учитывая то, как кажется, что win16 и c библиотека не доступны, он заявляет для обертывания функции CreateFile для создания собственной подобной c версии fopen? (Единственной другой вещью, о которой я знаю, является блок, и если, именно это он предлагал перенести, это не будет записано таким случайным способом.)

Учитывая вышеупомянутое, каковы отношения зависимости между языком C (синтаксис, структуры данных, управление потоком), c библиотека функций (напр. fopen), и API окон (напр. CreateFile)?

9
задан xaler7 25 June 2010 в 03:03
поделиться

10 ответов

Си существовал задолго до появления Windows. Windows API - это набор библиотек, написанных на C. Возможно, вы сможете или не сможете самостоятельно продублировать его функциональность, в зависимости от того, что Microsoft задокументировала или сделала доступным через API. На каком-то уровне вероятно, что fopen() и CreateFile() вызывают одну и ту же или похожую службу операционной системы, но маловероятно, что одна является строгой оберткой для другой. Вероятно, обойти Windows API для прямого доступа к аппаратному обеспечению будет сложно, но все возможно, если потратить достаточно времени и усилий на программирование.

18
ответ дан 4 December 2019 в 06:16
поделиться

Си ничего не знает о графическом интерфейсе пользователя и ОЧЕНЬ мало об операционных системах. Все, что вы делаете с графикой на C, осуществляется с помощью библиотек, примером которых является win32 api.

10
ответ дан 4 December 2019 в 06:16
поделиться

Теоретически можно написать C, который напрямую общается с оборудованием. Во времена MS-DOS (например) многие из нас делали это на довольно регулярной основе (поскольку MS-DOS просто не предоставляла то, что нам было нужно). Изменить: на некоторых небольших встраиваемых системах это все еще довольно обычное дело, но в типичных настольных системах это в основном исчезло.

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

Да, большая часть библиотеки C использует базовую ОС, поэтому (например) в Windows fopen и fwrite в конечном итоге вызовут CreateFile и ] WriteFile , но в Linux они в конечном итоге вызовут open и write вместо этого.

4
ответ дан 4 December 2019 в 06:16
поделиться

Я заметил сходство между c (библиотечной?) Версией открытия файла (fopen) и версией Windows API (CreateFile)

Не удивительно. Они делают похожие вещи.

[неужели] одно - это просто оболочка для другого? Кто-нибудь знает?

Вы не можете узнать, потому что исходный код принадлежит и хранится как коммерческая тайна. Неважно, что более «фундаментально». Вы используете API Windows из программы Windows. Вы используете C API из программ C.

Обратите внимание, что это не имеет значения. Вы можете использовать смешанные API C или Windows API.

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

«Прямой доступ к оборудованию»? Что это обозначает? Если windows работает, то .... ну ... винда работает. Windows обеспечивает ваш доступ к оборудованию.

Используйте bootcamp, GRUB или другой загрузчик, чтобы обойти Windows и получить «прямой доступ к оборудованию».

Если они могут, можно ли повредить оборудование, если вы не знаете, что делаете?

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

Что более переносимо?

Что это означает? На другой компьютер с Windows? На компьютер не под управлением Windows? О чем ты спрашиваешь? Пожалуйста, поясните свой вопрос, чтобы определить, что вы подразумеваете под «портативным».

между разными версиями окон

Поскольку разные Windows несовместимы, я обычно предлагаю использовать только стандартные библиотеки POSIX и избегать всех Windows API.

Однако некоторые варианты Windows (например, Windows Mobile для телефона против Windows «Server») по существу полностью несовместимы. Существует очень мало причин для работы какого-либо программного обеспечения на обеих ОС. Переносимость не имеет большого значения. Зачем пытаться запускать телефонное приложение на сервере?


Edit

Значит, язык c находится внизу (ближайший к оборудованию), затем API Windows, затем библиотека C поверх Windows API?

Это не имеет смысла. Вы смешиваете две не связанные между собой вещи. «Язык» и «библиотеки» мало связаны друг с другом.

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

Вот как на это посмотреть.

  • Операционная система Windows имеет несколько API. Существуют базовые библиотеки функций, которые не являются частью интерфейса приложения . Они «внутренние».
  • Имеет собственный Windows API. Вызывается из C.
  • Имеет POSIX API. Вызывается из C. В некоторых случаях Posix API обычно использует Windows API.
2
ответ дан 4 December 2019 в 06:16
поделиться

API Windows реализован на языке программирования C. Функциональность, предоставляемая стандартными библиотеками C, такими как fopen, является переносимой, поскольку она компилируется до соответствующего ассемблерного кода для разных архитектур разными компиляторами. Функции Windows API, такие как CreateFile, работают только на компьютерах под управлением Windows и поэтому не переносимы.

5
ответ дан 4 December 2019 в 06:16
поделиться

Большинство операционных систем, включая Windows, написаны на C (и / или ассемблере). Затем библиотека модифицируется для каждой операционной системы для выполнения основных задач. (Сокеты, файлы, память и т. Д.).

WINAPI - это просто набор библиотек (написанных на C и / или Ассемблере), которые обеспечивают доступ к функциям в ОС.

Это не связано с Windows, после того, как вы изменили свой вопрос, я думаю, что вы пытаетесь понять, является ли начальная загрузка ОС (Windows или другой).
В книге «Проектирование и реализация операционных систем» обсуждается реализация Minix (на которой основан Linux).

1
ответ дан 4 December 2019 в 06:16
поделиться

Карл Норум указал, что C существовал задолго до Windows, но не забывайте, что Windows API как бы начался с MS-DOS API, который как бы начался с CP / M API. . C существовал незадолго до CP / M.

Многие ответы, похоже, подразумевают, что Windows API построен на C, но это тоже кажется сомнительным. __stdcall является синонимом PASCAL, который был ключевым словом в компиляторах Microsoft C, потому что Windows API был построен на Pascal. __cdecl используется по умолчанию для вызовов функций в программах C и C ++, скомпилированных Visual Studio, но не работает с вызовами API.

Связь между C и Windows API заключается в том, что они могут работать друг с другом.

0
ответ дан 4 December 2019 в 06:16
поделиться

Операционные системы, такие как Windows, содержат библиотеки WINAPI, которые обеспечивают доступ к некоторым функциям операционной системы и иногда контакт с аппаратным обеспечением, эти библиотеки написаны на C

0
ответ дан 4 December 2019 в 06:16
поделиться

Интересно отметить, что вы действительно можете понять «мощь» Windows API, взглянув на AutoIt http://www.autoitscript.com/autoit3 / . AutoIt - отличный маленький язык сценариев, который может создавать графические интерфейсы, запускать приложения командной строки, управлять окнами и процессами и т. Д. Да, он выполняет файловый ввод-вывод и сетевое взаимодействие.

0
ответ дан 4 December 2019 в 06:16
поделиться

WINAPI предоставляет интерфейс, который разработчики на C могут использовать для использования функциональности WINAPI. Программы на C++ также могут использовать его.

1
ответ дан 4 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: