c# + winapi?
От: pus  
Дата: 03.12.03 07:30
Оценка:
Я начинающий программер C# и хотел бы получить ответ на такой вопрос: насколько целесообразно углубленно изучать WinApi для программирования на C#?
У меня есть небольшой опыт использования WinApi-функций с помощью аттрибута dllimport. Главная проблема, на мой взгляд, — это отсутствие указателей в C#, а ведь большинство WinApi-функций используют указатели в качестве параметров. Проблемой, к примеру, был вызов CreateProcess, которой нужно примерно 10 параметров (просто не знал, что в .NET есть аналогичная функция Process.Start(), — с ней работать гораздо проще).
Может быть, все-таки можно обойтись в подавляющем большинстве случаев библиотеками базовых классов .NET? Извиняюсь за ламерские вопросы.
Re: c# + winapi?
От: Аноним  
Дата: 03.12.03 07:39
Оценка: 12 (1)
Здравствуйте, pus, Вы писали:

pus>Я начинающий программер C# и хотел бы получить ответ на такой вопрос: насколько целесообразно углубленно изучать WinApi для программирования на C#?


в идеале абсолютно нецелесообразно

pus>У меня есть небольшой опыт использования WinApi-функций с помощью аттрибута dllimport. Главная проблема, на мой взгляд, — это отсутствие указателей в C#, а ведь большинство WinApi-функций используют указатели в качестве параметров. Проблемой, к примеру, был вызов CreateProcess, которой нужно примерно 10 параметров (просто не знал, что в .NET есть аналогичная функция Process.Start(), — с ней работать гораздо проще).

pus>Может быть, все-таки можно обойтись в подавляющем большинстве случаев библиотеками базовых классов .NET? Извиняюсь за ламерские вопросы.

указатели в с# есть, а вот на счет остального ты прав, лучше пользоваться библиотекой базовых классов ...
Re: c# + winapi?
От: GarryIV  
Дата: 03.12.03 07:45
Оценка: 13 (2)
Здравствуйте, pus, Вы писали:

pus>Я начинающий программер C# и хотел бы получить ответ на такой вопрос: насколько целесообразно углубленно изучать WinApi для программирования на C#?

pus>У меня есть небольшой опыт использования WinApi-функций с помощью аттрибута dllimport. Главная проблема, на мой взгляд, — это отсутствие указателей в C#, а ведь большинство WinApi-функций используют указатели в качестве параметров. Проблемой, к примеру, был вызов CreateProcess, которой нужно примерно 10 параметров (просто не знал, что в .NET есть аналогичная функция Process.Start(), — с ней работать гораздо проще).
pus>Может быть, все-таки можно обойтись в подавляющем большинстве случаев библиотеками базовых классов .NET?

Лучше направь свои силы на изучение классов, неймспейсов NET. WinAPI редко когда требуется, в 99% можно без них обойтись. А когда уж понадобится тогда и прочитаешь пару конкретных страниц в МСДН.
... << RSDN@Home 1.1.0 stable >>
WBR, Igor Evgrafov
Re[2]: c# + winapi?
От: mihailik Украина  
Дата: 03.12.03 12:05
Оценка:
GIV>Лучше направь свои силы на изучение классов, неймспейсов NET. WinAPI редко когда требуется, в 99% можно без них обойтись. А когда уж понадобится тогда и прочитаешь пару конкретных страниц в МСДН.

А уж когда понадобится, глядишь и Windows Longhorn выйдет, можно будет окончательно забить
... << RSDN@Home 1.1.0 stable >>
Re[3]: c# + winapi?
От: Аноним  
Дата: 03.12.03 12:12
Оценка: -1
M>А уж когда понадобится, глядишь и Windows Longhorn выйдет, можно будет окончательно забить

Не смешно.... ; (
Re[3]: c# + winapi?
От: pus  
Дата: 03.12.03 16:54
Оценка:
Благодарю всех откликнувшихся — Вы оправдали мои надежды. Вот только вопросик: а что за указатели есть в C# (в MSDN я сам найду, подскажите ключевые слова)?
Re[4]: c# + winapi?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.12.03 17:19
Оценка:
Здравствуйте, pus, Вы писали:

pus>Благодарю всех откликнувшихся — Вы оправдали мои надежды. Вот только вопросик: а что за указатели есть в C# (в MSDN я сам найду, подскажите ключевые слова)?


IntPtr
http://www.rsdn.ru/article/dotnet/netTocom.xml
Автор(ы): Алифанов Андрей
Дата: 15.02.2002
В статье рассматриваются вопросы взаимодействия программ, написанных на CLR-совместимых языках с неуправляемым кодом: с функциями Win32 API и COM-серверами.
и солнце б утром не вставало, когда бы не было меня
Re[5]: c# + winapi?
От: Mika Soukhov Stock#
Дата: 03.12.03 18:49
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>http://www.rsdn.ru/article/dotnet/netTocom.xml
Автор(ы): Алифанов Андрей
Дата: 15.02.2002
В статье рассматриваются вопросы взаимодействия программ, написанных на CLR-совместимых языках с неуправляемым кодом: с функциями Win32 API и COM-серверами.


Жаль, что там ничего нет про IntPtr
Re[3]: c# + winapi?
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.12.03 19:07
Оценка:
Здравствуйте, mihailik, Вы писали:

M>А уж когда понадобится, глядишь и Windows Longhorn выйдет, можно будет окончательно забить


Думаю еще лет 10 забыть нельзя будет. Лонгхорн все равно будет в основании АПИ-шные вещи иметь. То что его не будут развивать еще не значит, что его не будет вообще.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: c# + winapi?
От: mihailik Украина  
Дата: 04.12.03 08:07
Оценка:
M>>А уж когда понадобится, глядишь и Windows Longhorn выйдет, можно будет окончательно забить

VD>Думаю еще лет 10 забыть нельзя будет.


Эхо войны

Вообще-то я говорил "забить", а не "забыть".

VD>Лонгхорн все равно будет в основании АПИ-шные вещи иметь. То что его не будут развивать еще не значит, что его не будет вообще.


Я надеюсь, WinAPI будет затухать в своей узкой нише, а начинающие программисты смогут его благополучно игнорировать. Примерно как сейчас субклассирование окон или расширенные функции вывода на консоль.
... << RSDN@Home 1.1.0 stable >>
Re[4]: c# + winapi?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.12.03 09:25
Оценка:
Здравствуйте, pus, Вы писали:

pus>Благодарю всех откликнувшихся — Вы оправдали мои надежды. Вот только вопросик: а что за указатели есть в C# (в MSDN я сам найду, подскажите ключевые слова)?


unsafe и fixed
... << RSDN@Home 1.1.2 beta 1 >>
AVK Blog
Re[4]: c# + winapi?
От: mihailik Украина  
Дата: 04.12.03 10:12
Оценка: 14 (1)
pus>Благодарю всех откликнувшихся — Вы оправдали мои надежды. Вот только вопросик: а что за указатели есть в C# (в MSDN я сам найду, подскажите ключевые слова)?

Указатели есть в режиме unsafe (это ключевое слово).

Использовать указатели можно не очень свободно. Во-первых, часто приходится "пиновать" или "фиксировать" указатели, чтобы очистка Garbage Collect не передвинула их. Во вторых, всё чисто только когда работаешь со структурами, а с объектами начинаются оговорки.


Ещё есть IntPtr, которые помянул Sergino1. Они, вообще говоря, совсем не имеют свойств указателей. Просто тип данных, в котором может быть записано численное значение указателя. Так сказать, указатели, одетые в наручники. Но методы класса Marshal позволяют по по этим "арестованным" указателям получать разные значения: все виды строк, массивы, целые числа разной длины и пр. IntPtr в сочетании с классом Marshal можно использовать и не в режиме unsafe.

Таким образом, рекомендованные темы:
unsafe, fixed, System.Runtime.InteropServices.Marshal

Можешь также поискать насчёт "verifiable" сборок. Это подробности, что стоит за словом unsafe. А если уж совсем разберёт жажда знаний, смотри System.Reflection.Pointer и System.TypedReference. Хотя это уже некоторый изврат.
... << RSDN@Home 1.1.0 stable >>
Re[5]: c# + winapi?
От: mihailik Украина  
Дата: 04.12.03 10:12
Оценка:
pus>>а что за указатели есть в C# (в MSDN я сам найду, подскажите ключевые слова)?

S>IntPtr


В C# есть и собственно указатели, не только IntPtr.
... << RSDN@Home 1.1.0 stable >>
Re[5]: c# + winapi?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.12.03 15:38
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Я надеюсь, WinAPI будет затухать в своей узкой нише, а начинающие программисты смогут его благополучно игнорировать. Примерно как сейчас субклассирование окон или расширенные функции вывода на консоль.


Авалоновское окно — это обычное Win32-окно. И оно даже позволяет хостить Win32-контролы. Вот родные авалоновские конролы те уже рисуются сами, но опять же вся их отрисовка попадает в общее авалоновское окно. Т.е. реально все топлевел-окна обычные Win32. И вряд ли к релизу это исправится.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: c# + winapi?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.12.03 10:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Авалоновское окно — это обычное Win32-окно. И оно даже позволяет хостить Win32-контролы. Вот родные авалоновские конролы те уже рисуются сами, но опять же вся их отрисовка попадает в общее авалоновское окно. Т.е. реально все топлевел-окна обычные Win32.


Короче тот же свинг
... << RSDN@Home 1.1.2 beta 1 >>
AVK Blog
Re[7]: c# + winapi?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.03 16:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Короче тот же свинг


Не совсем. Апи рисования реализовано аппоратно. Когда доходишь до рисования примитивов, все уходит в интернал-вызовы. Ну, и качество значительно выше.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: c# + winapi?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.12.03 21:13
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Короче тот же свинг


VD>Не совсем. Апи рисования реализовано аппоратно.


Будет. В Аэро. Которого пока нет.

VD>Когда доходишь до рисования примитивов, все уходит в интернал-вызовы.


Ну и в свинге тоже самое — все примитивы рисует не свинг, а AWT, который по большей части на JNI написан.

VD>Ну, и качество значительно выше.


Качество чего?
... << RSDN@Home 1.1.2 beta 1 (Win32NT 5.1.2600.0) >>
AVK Blog
Re[9]: c# + winapi?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.03 21:36
Оценка: 1 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>Будет. В Аэро. Которого пока нет.


Не. Уже. Просто они его хотят на D3D посадить. А пока он через GDI скорее всего работает. Но шустро.

AVK>Ну и в свинге тоже самое — все примитивы рисует не свинг, а AWT, который по большей части на JNI написан.


Здается мне что ты ошибаешся. Я вроде бы встречал инфрормацию, что AWT Свингу ненужна. Да и судя по дичайшим тормозам они все рисуют в память.

VD>>Ну, и качество значительно выше.


AVK>Качество чего?


Результата. Свинговый интерфейс всегда выдает кривота. Все почти как настоящее пока мышку не двинул.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: c# + winapi?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 05.12.03 21:41
Оценка:
Здравствуйте, VladD2, Вы писали:

AVK>>Ну и в свинге тоже самое — все примитивы рисует не свинг, а AWT, который по большей части на JNI написан.


VD>Здается мне что ты ошибаешся. Я вроде бы встречал инфрормацию, что AWT Свингу ненужна.


Агашазблин.

VD>Да и судя по дичайшим тормозам они все рисуют в память.


У них dblbuffer по умолчанию включен.
... << RSDN@Home 1.1.2 beta 1 (Win32NT 5.1.2600.0) >>
AVK Blog
Re[6]: c# + winapi?
От: mihailik Украина  
Дата: 08.12.03 14:44
Оценка:
M>>Я надеюсь, WinAPI будет затухать в своей узкой нише, а начинающие программисты смогут его благополучно игнорировать. Примерно как сейчас субклассирование окон или расширенные функции вывода на консоль.

VD>Авалоновское окно — это обычное Win32-окно. И оно даже позволяет хостить Win32-контролы. Вот родные авалоновские конролы те уже рисуются сами, но опять же вся их отрисовка попадает в общее авалоновское окно. Т.е. реально все топлевел-окна обычные Win32. И вряд ли к релизу это исправится.


Интерестные данные

А если форме указать BackBrush, или как там оно называется, с нерегулярной полупрозрачностью. К примеру, текстурка с полупрозрачными "дырами". Потянет оно с виндовыми контролами такой изврат?

Сейчас вот в Win2K/XP я не видал ни разу нерегулярной полупрозрачности. Разве что в тенях хинтов и менюшек края более прозрачные, чем середина. Но как такое в своих окнах реализовать — не знаю.
... << RSDN@Home 1.1.0 stable >>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.