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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2014, 01:31   #1
relav_
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 27
По умолчанию Windows API и C#

читаю текст как вызвать неуправляемый программный код, как win32 API из C#, и натыкаюсь на такой текст: для того чтобы обратиться к какой-нибудь неуправлямой библиотеке DLL, вы должны преобразовать .NET-объекты в наборы struct, char* и указателей на функции, как того требует язык C.

в связи чем вопрос: почему именно как того требует язык С, а не какой-то другой язык? причем тут язык С?

P.S. если можно объяснить подробней, а не одним словом или фразой. спасибо за понимание.
relav_ вне форума Ответить с цитированием
Старый 20.01.2014, 01:42   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
почему именно как того требует язык С, а не какой-то другой язык? причем тут язык С?
а ядро и большинство библиотек windows на чем по вашему написано?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 21.01.2014, 00:55   #3
relav_
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 27
По умолчанию

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

что значит , что библиотека написанна на языке С?
relav_ вне форума Ответить с цитированием
Старый 21.01.2014, 02:17   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от relav_ Посмотреть сообщение
насколько я знаю библиотеки компилируются в машинный код при этом теряется признак того, что библиотека была написанна например на С. В библиотеках же хранится не текст написанный на языке С, а машинные команды.

что значит , что библиотека написанна на языке С?
Программы и библиотеки написанные на C# компилируются не в машинный, а в IL-код. IL-код выполняется в среде виртуальной машины CLR.
Помимо этого, для вызова функции из любой DLL, если она принимает какие-либо параметры, ей необходимо их передать в "понятном для неё виде". Также программа должна каким-то образом найти в DLL точку входа в эту функцию.
Поэтому при вызове неуправляемого кода требуется преобразование объектов .NET, как того требует язык C.

Последний раз редактировалось Streletz; 21.01.2014 в 02:29.
Streletz вне форума Ответить с цитированием
Старый 21.01.2014, 02:20   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Streletz Автор не про то спрашивает.
eval вне форума Ответить с цитированием
Старый 21.01.2014, 02:34   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Streletz Автор не про то спрашивает.
Автор спрашивает:
Цитата:
почему именно как того требует язык С, а не какой-то другой язык? причем тут язык С?
Я ему подробно ответил, причём здесь язык C и почему требуется требуется преобразование объектов .NET в соответствии с требованиями данного языка.
Про то, что ядро Windows написано на C ему уже ответили до меня.
Streletz вне форума Ответить с цитированием
Старый 21.01.2014, 12:23   #7
relav_
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 27
По умолчанию

Цитата:
если она принимает какие-либо параметры, ей необходимо их передать в "понятном для неё виде"

что значит в понятном для нее виде. можете это расшифровать более детально?
relav_ вне форума Ответить с цитированием
Старый 21.01.2014, 12:35   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от relav_ Посмотреть сообщение
что значит в понятном для нее виде. можете это расшифровать более детально?
чтоб байтики лежали на своих местах, а не где попало.
собственно эти места и надо расписать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.01.2014, 13:05   #9
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

ТС: думаю, вам интересно будет прочитать статью о соглашениях вызова функций, в ней как раз описаны способы вызовов функций (в т.ч. Winapi) и передачи параметров/получения результата
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 21.01.2014, 13:56   #10
relav_
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 27
По умолчанию

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

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

верно я понял?
relav_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows API Xme1ez Помощь студентам 3 23.11.2012 21:01
С и Windows API - изменение реестра Matadora Помощь студентам 1 09.11.2011 20:16
Windows 7 API Gerzs Win Api 2 14.12.2009 16:48
Ищу книги по Windows API Malkovich Свободное общение 6 15.08.2009 15:00