Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое WinAPI? 
:(
    Опции темы
 
Что такое WinAPI?
Произведения искусства [ 12 ]  [28.57%]
Кладезь отстоя [ 24 ]  [57.14%]
Свой вариант (опишу в теме) [ 6 ]  [14.29%]
Всего проголосовавших: 42
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
GoldFinch
Дата 17.5.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



WinAPI - это не библиотека языка Си или какого-то еще языка.

Цитата(djamshud @  17.5.2010,  17:40 Найти цитируемый пост)
юниксовый системный вызов open

как вызвать "юниксовый системный вызов open" не из Си, а например из асма?
PM MAIL ICQ   Вверх
Alexeis
Дата 17.5.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(GoldFinch @  17.5.2010,  14:47 Найти цитируемый пост)
COM - это набор соглашений о взаимодействии компонентов вообще, без какой либо привязки к ОС. 

  Еще скажи, что это не изобретение Microsoft. А вот как ты получишь доступ к объектам шела на WinApi не используя COM? Или как создашь устройство DirectX? Чушь это все. COM объект реализуется в исполняемом модуле PE стандарта Windows, при регистрации требует реестр. Ну просто пипец как не связан с Windows. Ну просто ничего общего.
  
Цитата(GoldFinch @  17.5.2010,  14:47 Найти цитируемый пост)
.NET - это платформа для выполнения MSIL, без какой либо привязки к ОС. 

  Однако она не работает НИ ГДЕ кроме как на Windows машинах. Переносимый код пишется на CF или Mono. 

Цитата(GoldFinch @  17.5.2010,  14:47 Найти цитируемый пост)
По сути системные компоненты COM и .NET это не более чем обычные нативные приложения, ни чем не отличающиеся от любых других приложений.

  Это приложения, которые имеют строгую архитектуру, в их исполняемых модулях нет прямых ссылок на API функции (разве что kernel32), точно также как и QT. 
  Если дом построили из железобетона, никто ведь не говорит, что дом построили из песка, цемента и арматуры, а говорят панельный дом.

Цитата(GoldFinch @  17.5.2010,  14:47 Найти цитируемый пост)
Почему в винде куча языков - ассемблеры, Си, дельфи,
а в никсах только Си?

  В винде нет кучи языков. Языки существуют безотносительно платформы. В никсах также доступно много компиляторов. Для того же Delphi-Object Pascal существует компилятор Free Pascal под линукс. Аналогично на C# можно писать под Mono, CF или .NET .

 




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
djamshud
Дата 17.5.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>WinAPI - это АПИ ОС. Оно максимально отражает сущности в ОС и обеспечивает управление ими.

АПИ - это _интерфейс_. Это не потроха операционки, это ее интерфейс. Факт, что винда высовывает наружу кучу своего внутреннего дерьма. А еще больше прячет, что несомненно к лучшему.

>Потому что в ядре ОС есть объект "файл". CreateFile создает этот объект. При этом при создании этого объекта надо обеспечить возможность указать все необходимые параметры создаваемого объекта.

open тоже создает объект файл и возвращает его идентификатор (HANDLE). Функция позволяет (а не заставляет) задать любые необходимые параметры.

>Почему в никсах open есть перегрузки, а у CreateFile нет? Потому что никсы заточены под на Си, и там можно юзать манглинг Си. А WinApi рассчитано на любые языки, по этому там не может быть использован манглинг, а значит там не может быть перегрузок.

open - это скорее исключение. Причем никакого манглинга не используется судя по ассемблерному листингу (мне ж самому интересно стало). В целом же  перегрузок функций вообще нет. Юзать эти функции принципиально может любой язык, так или иначе бинарно совместимый с ядром ОС, то есть как и в винде.

Добавлено через 36 секунд
>как вызвать "юниксовый системный вызов open" не из Си, а например из асма?

call open

Добавлено через 4 минуты и 44 секунды
Код

#include<fcntl.h>

int main(){
int fd=open("file",O_RDONLY,0);
close(fd);
return fd;
}


Код

        .file   "file.c"
        .section        .rodata
.LC0:
        .string "file"
        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        andl    $-16, %esp
        subl    $32, %esp
        movl    $0, 8(%esp)
        movl    $0, 4(%esp)
        movl    $.LC0, (%esp)
        call    open
        movl    %eax, 28(%esp)
        movl    28(%esp), %eax
        movl    %eax, (%esp)
        call    close
        movl    28(%esp), %eax
        leave
        ret
        .size   main, .-main
        .ident  "GCC: (Gentoo 4.4.3-r2 p1.2) 4.4.3"
        .section        .note.GNU-stack,"",@progbits


GCC это сделал так. Руками очевидно можно также или чуть по-другому, но я понимаю асм только в ридонли, поэтому сам не напишу.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 17.5.2010, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Alexeis, оболочка windows (шелл) - это не более чем обычная программа. Это не ОС. Это оболочка ОС. Ее можно заменить на что-то другое, без COM.
Цитата(Alexeis @  17.5.2010,  19:41 Найти цитируемый пост)
COM объект реализуется в исполняемом модуле PE стандарта Windows, при регистрации требует реестр.

даже не смешно. 99.95%  программ - это PE. 88% работают с реестром. 
COM - это не интерфейс ОС. Не каждый COM объект это часть ОС.
Цитата(Alexeis @  17.5.2010,  19:41 Найти цитируемый пост)
Это приложения, которые имеют строгую архитектуру, в их исполняемых модулях нет прямых ссылок на API функции (разве что kernel32)

зато есть в mscoree и т.п.

Alexeis, у ОС есть ядро. Оно нативное. Оно не использует COM. WinAPI - это интерфейс ядра ОС. А не интерфейс системных компонентов COM и библиотек .NET.
В конце концов это весьма странный спор. Я много раз дебажил программы, попробуйте и вы. Возьмите отладчик и подебажте системные компоненты COM или .NET. Вы сразу увидите как именно они связаны с ОС.

Цитата(Alexeis @  17.5.2010,  19:41 Найти цитируемый пост)
В винде нет кучи языков. Языки существуют безотносительно платформы.

VB, который чистый COM, под никсы есть? Я что-то с трудом представляю себе строчку
Код

Set xxx = GetObject('com.identifier')

PM MAIL ICQ   Вверх
GoldFinch
Дата 17.5.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



djamshud, а зачем ОС что-то прятать? все что *нужно* прятать, в винде "спрятано" в native API, все что может быть доступно программисту - то доступно программисту.

Цитата(djamshud @  17.5.2010,  19:46 Найти цитируемый пост)
call open

мне это говорит только о том, что где-то есть библиотека (.lib) которая и вызывает непосредственно системную open
эта .lib (наверное libc.lib) линкуется с твоим .obj и получается программа которая вызывает open
но это все средства Си

представь что я хочу написать для никсов компилятор нативного кода, чтоб сразу elf генерил (или что там исполняемое в никсах)
что мне надо сгенерить чтобы вызвать эту самую open? как оно все выглядит изнутри?

прочем я сомневаюсь что ты можешь ответить на этот вопрос, т.к. наверное не знаешь как исполняемые модули в твоих любимых никсах  выглядят изнутри =)
PM MAIL ICQ   Вверх
GoldFinch
Дата 17.5.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(GoldFinch @  17.5.2010,  20:22 Найти цитируемый пост)
представь что я хочу написать для никсов компилятор нативного кода, чтоб сразу elf генерил (или что там исполняемое в никсах)
что мне надо сгенерить чтобы вызвать эту самую open? как оно все выглядит изнутри?

посмотрел на ELF. вопрос снят.
PM MAIL ICQ   Вверх
Alexeis
Дата 17.5.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(GoldFinch @  17.5.2010,  18:03 Найти цитируемый пост)
VB, который чистый COM, под никсы есть? Я что-то с трудом представляю себе строчку

  Visual Basic это компилятор бейсика под Windows. Язык это Basic или его разновидность. Для линукса есть REALbasic.

Цитата(GoldFinch @  17.5.2010,  18:03 Найти цитируемый пост)
Alexeis, у ОС есть ядро. Оно нативное. Оно не использует COM. WinAPI - это интерфейс ядра ОС. А не интерфейс системных компонентов COM и библиотек .NET.

  Читаем вики
Цитата

Windows API (application programming interfaces) — общее наименование целого набора базовых функций интерфейсов программирования приложений операционных систем семейств Windows и Windows NT корпорации «Майкрософт»

  Где тут хоть слово про ядро ОС? Речь об интерфейсах программирования операционной системы. Интерфейсы могут описываться как функциями так и объектами при условии что определен объектный стандарт. Функции Shell, DirectX, BITS это также интерфейсы программирования операционной системы Windows. И чем дальше тем больше. 
  
Цитата(GoldFinch @  17.5.2010,  18:03 Найти цитируемый пост)
В конце концов это весьма странный спор. Я много раз дебажил программы, попробуйте и вы. Возьмите отладчик и подебажте системные компоненты COM или .NET. Вы сразу увидите как именно они связаны с ОС.

  Ну так и что с того? Разве непосредственный вызов внутренних функций документирован как API? Есть документация на программный интерфейс DirectX Там английским по черному написано про COM объекты. Тоже самое и взаимодействие с оболочкой, тоже самое и с .NET . Программный интерфейс такой какой он определен, а не такой как реализован. Любая недокументированная функция может впоследствии менять свое поведение или полностью исчезать. Для программиста это должен быть черный ящик.
  Такие функции как CreateFile это интерфейс основанный на функциях, IDirect3D9::CreateDevice прикладной интерфейс основанный на COM объектах, даже если метод CreateDevice вызывает внутри только функции ядра. Я об это не знаю, более того я об этом не должен знать, потому что автор оставляет за собой право менять реализацию как он хочет.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
GoldFinch
Дата 17.5.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Alexeis, если я разработаю свою технологию компонентов FinchComponentObjectModel ™, и сделаю компонент FSystem который позволит работать с системой, то вы назовете это winAPI?

А если я разработаю свою платформу FinchNET, в ней будет встроенная библиотека System, то вы тоже назовете это winAPI?

>  черный ящик
>  Я об это не знаю, более того я об этом не должен знать
а я знаю. знаю что внутри этого черного ящика, и знаю почему именно так, а не иначе.
PM MAIL ICQ   Вверх
djamshud
Дата 17.5.2010, 20:35 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



GoldFinch, не надо прятать. Надо давать хороший интерфейс. Да, open не совсем "системный" вызов, это небольшой враппер над реальным системным вызовом sys_open, К которому можно обратиться либо по имени, либо через его код. Но интерфейс sys_open  аналогичен простому open-у (и других sys_ - в подавляющем большинстве случаев).

Благодарю, что дал повод глубже просветиться в этом вопросе. Но это не отменяет того факта, что интерфейс винапи на примере того же CreateFile просто отвратителен. Про работу с окнами (они ведь до сих пор в ведре наверное?) я промолчу.

Про непосредственно структуру ELF не знаю, оно мне пока как бы и не надо.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 17.5.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(wikipedia)
функций интерфейсов программирования приложений

мне одному кажется что это неправильный перевод "API" применительно к windows API?
API - это интерфейс программирования (программного управления) приложений, но в случае windows API - в роли приложения выступает windows,
и windows API надо понимать как "интерфейс программного управления windows".

Добавлено через 6 минут и 41 секунду
djamshud, а что с CreateFile не так? То что там флаги сгруппированы по нескольким аргументам? Это удлиняет сигнатуру, но не более того, кому-то такая группировка будет даже удобней. То что там опции безопасности есть? У всех хендлов объектов ядра есть опции безопасности, в ряде случае их необходимо заполнять, но обычно их заполнять не надо, то что тут плохого? Обычный опциональный параметр. То что там хендл файла-шаблона есть? Опять же необязательная вещь.
Или ты предлагаешь сделать не 1 функцию, а 4 с разными комбинациями опциональных параметров? Сомнительное решение, учитывая что там нельзя использовать перегрузки.
PM MAIL ICQ   Вверх
djamshud
Дата 17.5.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



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

АПИ ОС не обязано быть сложным. Как пример простого АПИ я не просто так привел лаконичное юниксовое, я его время от времени использую. И я использовал винАПИ. Исходя из этого (а не потому, что юникс фарева!!!11 (хотя это так:) )) я и заявляю, что винАПИ - это просто чудовищный п-ц и издевательство над программистом.

Добавлено через 1 минуту и 59 секунд
Плюс к разговору о разбиении функций на несколько. В винАПИ и сплошь и рядом наблюдаются функции с разными префиксами или постфиксами.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 17.5.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(djamshud @  17.5.2010,  22:17 Найти цитируемый пост)
длинное сложное имя

короткое популярное имя в глобальной области видимости - это зло
длинные развернутые имена (и типов тоже) позволяют исключить пересечения имен и лучше документируют код
Цитата(djamshud @  17.5.2010,  22:17 Найти цитируемый пост)
И оно никому не нравилось.

тем кто это юзает - тем нравится
PM MAIL ICQ   Вверх
djamshud
Дата 17.5.2010, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



>короткое популярное имя в глобальной области видимости - это зло

Как показывает практика, короткие емкие имена и такая же система типов - это просто сказка. Возрастает как скорость написания, так и понимание кода, который не прячется за забором БесконечноДлинныхФункций(И,НЕВМЕНЯЕМЫХ,ПАРАМЕТРОВ).

>>И оно никому не нравилось.
>тем кто это юзает - тем нравится 

В данном случае я приводил мнения тех, кто юзал (а может и сейчас юзают). Впрочем пруфов IRL не будет.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Alexeis
Дата 17.5.2010, 21:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(GoldFinch @  17.5.2010,  19:35 Найти цитируемый пост)
API - это интерфейс программирования (программного управления) приложений, но в случае windows API - в роли приложения выступает windows,

  Windows не может быть приложением к самой себе. Windows является базовой программой, а программы под Windows изначально определялись как дополнения к ней, приложения, почти что плагины к ОС. Кстати неплохая аналогия. Windows для приложения тоже, что приложение для плагина. Т.е. программа (Windows) предоставляет набор прикладных интерфейсов и сервисов для взаимодействия оборудованием. Кроме того каждый интерфейс определяет некий бинарный стандарт определяющий правила воздействия на закрытый конечный автомат (или группу таких конечных автоматов). Изменение состояния такого автомата возможно только путем посылки ему сигнала, но не более того.
  Сигналом, в общем случае может быть все что угодно, например функция, аппаратный регистр, пакет данных полученный из сети (функция приема одна, пакеты могут быть разные), и т.д. Сигналом можно считать не только то что непосредственно реализуется в машинных кодах, в конечном итоге его следует рассматривать не более чем оператор, реализация же не определяет его логической сути.

  Windows API нельзя определять только как набор функций для взаимодействия с модулями kernel32 user32 gdi32 . Куда же в таком случае отнести Comctl32.dll ? Shscrap.dll ? Ole32.dll ? comsvcs.dll ? setupapi.dll ? crypt32.dll ? ws2_32.dll ? shell32.dll 

Кстати вот что есть в английской Wiki по Win API
The functionality provided by the Windows API can be grouped into eight categories
Base Services
Advanced Services
Graphics Device Interface
User Interface
Common Dialog Box Library
Common Control Library
Windows Shell
Network Services

Речь о самых крупных частях. Далее упоминается о Web движке включая IE msxml,  Multimedia (DirectX), Program interaction (DDE, OLE, COM и т.д.) 

Т.е. понятие Windows API намного более широкое чем просто 3 базовых модуля ядра.

Добавлено через 7 минут и 5 секунд
Цитата(djamshud @  17.5.2010,  20:17 Найти цитируемый пост)
и заявляю, что винАПИ - это просто чудовищный п-ц и издевательство над программистом.

  Не нужно смешивать все в кучу. Первоначально всего этого не было. Объем это результат сохранения обратной совместимости. С префиксами и постфиксами все просто. Например постфикс Ex означает расширенную версию. Цифровой постфикс версию API. 
  Правильным является изучение новых API, которые призваны заменить старые. Весь набор избыточный. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 17.5.2010, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



каков размер winapi?
имеется в виду количество системных функций и их отображений в userspace
удовлетворяет ли он принципу Оккама?
касаемо параметров, большое их количество свидетельствует о недостаточной продуманности интерфейса
пример продуманности...взять тот же ioctl
основан на уровнях доступа и концепции файлов
по сути все, что надо для работы с любым объектом, обладающим файловой семантикой
это сам объект (его отображение в userspace в виде дескриптора), команда и параметр
ни убавить, ни прибавить
рассмотрим open/creat vs. CreateFile
зачем пихать все в CreateFile, если, скажем фактически для создания важны только режим доступа и идентификатор?
все остальное - ioctl

Добавлено через 3 минуты и 45 секунд
Цитата(GoldFinch @  17.5.2010,  20:35 Найти цитируемый пост)
Или ты предлагаешь сделать не 1 функцию, а 4 с разными комбинациями опциональных параметров?

уровни доступа
слышал про setsockopt
работает со всеми доменами и протоколами для любых типов сокетов
5 исчерпывающих параметров

Добавлено через 9 минут и 26 секунд
Цитата(GoldFinch @  17.5.2010,  15:47 Найти цитируемый пост)
а в никсах только Си?

есть еще С++, java, perl, python, Go, haskell, lisp и много много других ;)
а то, что С используется чаще всего, так это потому, что в умелых руках он превращается в мощнейшее орудие разработки
стОит ли говорить, что подавляющее большинство либ написаны на С и этим богатством можно воспользоваться напрямую без всяких кривых биндингов


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.