Как использовать MSDN

Это может показаться глупым вопросом, но либо документация плохая, либо мне не хватает чего-то, чего я не читал. Каждый раз, когда я обращаюсь к MSDN по вопросам, связанным с C ++, я всегда в замешательстве. Как функция SetComputerName. Я просмотрел MSDN и не знал, как им пользоваться, потому что был совершенно не в курсе. Может ли кто-нибудь научить меня читать что-то подобное, если бы вы могли объяснить это в терминах непрофессионала, я не очень хорошо разбираюсь в C ++, спасибо!

BOOL WINAPI SetComputerName(
_In_ LPCTSTR lpComputerName
);

person Jacob Sator    schedule 09.08.2018    source источник
comment
Вы называете это, передавая новое имя компьютера. Он возвращает BOOL, который указывает, удалось это или нет.   -  person Ken White    schedule 09.08.2018
comment
@KenWhite, не могли бы вы объяснить мне, для чего нужны такие вещи, как WINAPI, или IN, или LPCTSTR, или даже LPComputerName, вроде как я хочу привыкнуть к его использованию самостоятельно, не хочу такого объяснения   -  person Jacob Sator    schedule 09.08.2018
comment
Этот вопрос слишком велик для этого сайта. Вы просите учебник по основам программирования на C, типам данных WinAPI и чтению документации WinAPI. Мы не пишем учебники, когда есть целые книги, посвященные этой теме. Вы можете посмотреть, сможете ли вы найти одну из ранних книг Чарльза Петцольда на Amazon или eBay. Вам нужно будет гораздо лучше разбираться в основах, прежде чем вы начнете пытаться использовать API напрямую, особенно те, которые имеют постоянное влияние.   -  person Ken White    schedule 09.08.2018
comment
Как только вы поймете, что WinAPI - это не C ++ и не такой вещи, как C / C ++, все будет под гору.   -  person Ron    schedule 09.08.2018
comment
@ Рон, подожди, что ты имеешь в виду?   -  person Jacob Sator    schedule 09.08.2018
comment
Он имеет в виду, что подавляющее большинство WinAPI написано на C, а не на C ++, и это не один и тот же язык, как и кошка и морковь, потому что оба они начинаются с ca .   -  person Ken White    schedule 09.08.2018
comment
@KenWhite, подождите, все не так просто, вы не можете просто объяснить мне, что означают LPCTSTR и IN или даже как использовать MSDN?   -  person Jacob Sator    schedule 09.08.2018
comment
Вы читаете MSDN, читая слова и понимая типы и соглашения, используемые в этой документации. Опять же, на эту тему написаны целые книги. Я даже порекомендовал один, и недорогой способ его найти. Объяснение того, как читать эту одну функцию, далеко не уведет вас, потому что это один из самых простых и понятных вызовов API, которые вы можете сделать; если вы этого не понимаете, вам нужно будет изучить очень много вещей, чтобы эффективно использовать MSDN, и (еще раз) это слишком широко для этого сайта.   -  person Ken White    schedule 09.08.2018


Ответы (1)


Здесь есть несколько макросов, которые используются в основном по историческим причинам, а также тип и имя параметра.

BOOL WINAPI SetComputerName(
_In_ LPCTSTR lpComputerName
);

BOOL используется для логических значений, поскольку в C не было стандартизованного до 1999 года типа bool, а Windows API старше этого, см. Почему Microsoft использует так много макросов в своем коде C ++?

WINAPI используется для обозначения функций Windows API соглашением о вызовах, см. Что делает WINAPI в основная функция означает?. Обычно это не имеет значения для вас, только для вашего компилятора.

LPTCSTR означает «длинный указатель на константную строку TCHAR». См. LPCSTR, LPCTSTR и LPTSTR. TCHAR - еще один макрос, который представляет собой либо однобайтовый, либо широкий символ, в зависимости от параметров времени компиляции. На него нужно обратить внимание, так как это тип параметра.

_In_ отмечает параметр как вход для функции, а не указывает на хранилище для результата. Иногда это полезная документация, а также подсказка для анализа кода. См. Что такое _In_ в C ++?

lpComputerName «lp» - это венгерская нотация Microsoft для «длинного указателя», содержащего новое значение имени компьютера.

«длинный указатель» - это ссылка на старую модель памяти, где у вас были 16-битные указатели и 32-битные «длинные указатели», в настоящее время все указатели 32- или 64-битные, в зависимости от параметров компилятора.

Исторически сложилось так, что P означает «указатель», а LP - «длинный указатель». Длинные указатели (также называемые дальними указателями) являются пережитком 16-битной Windows, когда они были необходимы для адресации диапазонов памяти за пределами текущего сегмента. Префикс LP был сохранен, чтобы упростить перенос 16-битного кода в 32-битную Windows. Сегодня нет различия - указатель есть указатель. - Соглашения о кодировании Windows

person Pete Kirkham    schedule 09.08.2018
comment
Черт возьми, нам нужно больше таких людей, как ты, в этой индустрии. подпирает мой человек! также как узнать, что поместить в LPCSTR? - person Jacob Sator; 09.08.2018
comment
@JacobSator, если вы определили UNICODE в параметрах компилятора, тогда это строка C широких символов, в противном случае это строка C однобайтовых символов, например буквальный "My computer". Есть даже макрос для литералов правильного типа в зависимости от параметров, но я не могу вспомнить его в данный момент. - person Pete Kirkham; 09.08.2018
comment
Также обратите внимание, что ссылки были в первых нескольких результатах при поиске каждого слова на этом сайте / msdn. - person Pete Kirkham; 09.08.2018
comment
@PeteKirkham Я думаю, это _T("My computer") - person alain; 09.08.2018