Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2018, 16:28   #21
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Давайте смотреть в корень. Что такое WinAPI по сути своей? Это набор функций, экспортируемых из системных DLL. Значит, чтобы работать с WinAPI, Ваш язык должен уметь
1) Загрузить в память DLL и получить из неё адрес функции
2) Вызвать эту функцию с соблюдением конвенций вызова
3) Произвести преобразование типов при необходимости
Третий пункт обычно выливается в необходимость работы со структурами и указателями.

Если язык не поддерживает часть перечисленного напрямую, выход иногда всё же можно найти. Он состоит в написании прослойки между языком и WinAPI, чаще всего таки на C
Black Fregat вне форума Ответить с цитированием
Старый 06.06.2018, 12:15   #22
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
Сообщение

Бредовый вопрос. Win32 API - набор функций/интерфейсов взаимодействия с операционной системой. Привязан ли к языку программирования? Безусловно. ОС на C/C++ написана, Поставляемые Windows SDK/DDK на C/C++. Чтобы самому транслировать API в какой-то свой язык программирования, нужно минимально знать C/C++, иначе появляются темы "Как это использовать X в паскале, C# и т.д." потому что из коробки некая новомодная функция из SDK/DDK не описана в библиотеках того же Delphi/C# и проч. Благо MSDN обновили, описание и даже примеры использования можно посмотреть на С++, C# иногда даже VB.Net.
Если у Вас не возникает проблем с самостоятельным описанием C++ функций/интерфейсов и структур в том же Delphi, то для Вас лично Win32 API уже ни к чему не привязан, потому что Вы сами в состоянии перенести описание функции в другой ЯП.

Что касается примеров кода на языках программирования, то мне тоже не понятно ваше негодование. Языки высокого уровня ничем особо не отличаются друг от друга. Мне вот без разницы, какой пример кода я читаю, C#, C++ или Delphi, общий смысл переданный автором кода мне понятен.

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

Последний раз редактировалось Человек_Борща; 06.06.2018 в 12:28.
Человек_Борща вне форума Ответить с цитированием
Старый 20.04.2019, 13:35   #23
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Drekon Посмотреть сообщение
Я в этом разделе задаю вопросы по Win32 API, а отвечающие наровят предложить решение на каком-либо языке программирования.
Я в каждой теме теперь пишу, чтобы не предлагали решение на каком-либо языке программирования, а форумчане все равно хотят предложить.
любое решение будет на языке программирования. Отсутствие привязки лишь означает, что этот язык может быть почти любым, но совсем без него никак. Общие слова –это ведь не ответ. Взять, например, добавление строки в комбобокс.
Код:
SendMessage(Window, CB_ADDSTRING, 0, (LPARAM)L"строка");
. Да, можно послать и на паскале, в коде всё равно следов языка не будет, а приложение не инкапсулирует все внутренности данной «операции», а обращается к системе. А какой ответ дать без языка программирования? «Вызови функцию SendMessage, первый параметр – дескриптор окна, второй CB_ADDSTRING, третий – 0, четвёртый – адрес добавляемой нуль-терминальной строки, приведённый к LPARAM»? Во-первых CB_ADDSTRING – это макрос, его знает только компилятор, на самом деле этот параметр – число. На другом языке макрос теоретически может иметь другое имя, а паскаль вообще не поддерживает макросов, вместо них там именованные константы. Как зовут константу? Теоретически её могут звать как угодно. Например, CbAddstring. Хотя, паскаль ещё и регистров не различает. А если третий язык и регистры различает, и макрокросы не поддерживает, зато поддерживает именованные константы, у которых есть только значения, но вообще нет адресов? А если ADD_STRING ещё и совпадёт с именем встроенной функции? Это не часть АПИ, а чисто синтаксическая нахлобучка, можно использовать её имя для других целей. А какое число дать в ответе? Сионитс его просто не знает. Мало того, никто ему постоянство этого значения не гарантировал, в другой линейке винды эти числа могут отличаться, а некоторые функции – сохраниться. Во-вторых имена типов тоже могут отличаться в других языках. Получилось, что я попытался отойти от c, но лишь замаскировал его, сохранив привязку ответа к языку. Тогда как? «Вызови SendMessage, первый параметр – дескриптор окна, второй – какое-то число, третий – ноль, четвёртый – приведённый к нужному типу адрес нуль-терминальной добавляемой строки». Вот теперь я действительно ушёл от c. Вот только пользы теперь 0. Потому что не известно, какое нужно число и к чему приводить адрес. Причём, авторы книг по АПИ рекомендуют использовать не сами числа, а их имена. А «ответ» «Вызови функцию SendMessage, первый параметр – дескриптор окна, второй CB_ADDSTRING, третий – 0, четвёртый – адрес добавляемой нуль-терминальной строки, приведённый к LPARAM» даже вреден.

Последний раз редактировалось taras-proger77; 20.04.2019 в 13:40.
taras-proger77 вне форума Ответить с цитированием
Старый 20.04.2019, 19:24   #24
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
В исполняемом коде следов языка не будет.
Это не совсем так. Существуют исполняемые файлы в виде текста, типа bat, cmd, js, vbs и т.п. где очень четко прослеживается след языка.
Для бинарных случаев существуют программы вида ExeInfo PE, PEiD и т.п. которые находят следы языка программирования и сообщают об этом всем желающим.
kvitaliy вне форума Ответить с цитированием
Старый 21.04.2019, 07:21   #25
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Это не исполняемые, а интерпетируемые. Есть ещё шитый код. Файлы шитого кода – исполняемые, но исполняемого кода там только главный цикл и интерпретатор, остальной код опять интерпретируемый. Но системе пофиг, что вы интерпретируете. Ей важно, что на машине исполняется. А там следов языка разработки интерпретатора опять нет. Больше того, интерпретируемого текста/кода АПИ не видит даже в том случае, когда он интерпретируется командным процессором в составе самой системы. Это разные части системного кода, а АПИ колышит только как к нему обращаются.
taras-proger77 вне форума Ответить с цитированием
Старый 21.04.2019, 07:45   #26
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
Для бинарных случаев существуют программы вида ExeInfo PE, PEiD и т.п. которые находят следы языка программирования и сообщают об этом всем желающим.
Языков? Или компиляторов? При разработке целиком на языке ассемблера можно и авторство установить по некоторым особенностям. Например, по порядку операций, порядок которых не влияет на результат. Вы себе АПИ только для самого автора хорошо себе представляете? Компилятор с языком можно связать по базе. Но это не следы непосредственно языка, к которым можно было бы привязать АПИ. Если соглашения, адреса функций, типы и количества параметров соблюдены, а сами фактические параметры валидны, то остальное АПИ уже не касается. Да, есть характерные для языков соглашения о вызовах. Например, сидекл. Вот только и на си можно написать функцию с паскалевым соглашением о вызовах. И, наоборот, функции ВинАПИ даже с паскаля вызываются в соглашениях стдкал и винапи. А если разработать компилятор си для зет 80? Там сидекл вообще не реализуем за неимением регистров общего назначения. Что, только на этом основании скажете, что это уже не си? Си – не паскаль, низкоуровневых операций в обход оператора asm в нём нет. Ни к регистру в обход asm обратиться, ни прерывание прямо на си вызывать. Так что низкий уровень сам по себе, а высокий с ним не смешан. Язык же исходника тот же текст значит то же. Получается, что внутри прилады можно общеязыкастые соглашения послать нафиг. Да, обычно так не делают. Но это не след языка как такового, а след обычая разработчиков компиляторов с языка. Привязаться к нему нельзя. А АПИшные и библиотечные вызовы и соглашения оконных процедур определяются библиотеками и системой. Я однажды на бейсике таких обратных вызовов накрутил, что самому Биллу в страшном сне вряд ли снились. Именно в страшном, потому что криво.

Последний раз редактировалось taras-proger77; 21.04.2019 в 07:49.
taras-proger77 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обучающая среда обучения языку программирования Alxdr C# (си шарп) 3 24.01.2016 14:26
Выясннить в каком месте кода происходит win32 ошибка C# проект lightforever Фриланс 0 10.05.2011 17:34
win32 API.Visual Studio 2008.Создание проекта Win32 Aleksandr_Yanov Visual C++ 2 12.09.2010 13:09
Win32 API. VS2008. Как создать приложение win32 в vs2008? Aleksandr_Yanov Visual C++ 4 12.09.2010 00:59
как открыть файл php в каком-либо браузере osichev Помощь студентам 3 24.03.2010 20:58