Форум программистов, компьютерный форум CyberForum.ru

WinMain entry point - C++

Восстановить пароль Регистрация
 
Skitalec-x
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 10
22.11.2013, 20:35     WinMain entry point #1
Здравствуйте!

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

На странице http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx точку входа предлагается делать таким образом:

C++
1
2
3
4
5
6
int CALLBACK WinMain(
  _In_  HINSTANCE hInstance,
  _In_  HINSTANCE hPrevInstance,
  _In_  LPSTR lpCmdLine,
  _In_  int nCmdShow
);
А на странице http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx по другому:

C++
1
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow);
В чем разница и как будет более правильно?

Заранее спасибо за ответ.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.11.2013, 20:58     WinMain entry point #2
Skitalec-x,
Это прототип функции винмайн
C++
int CALLBACK WinMain(
  _In_  HINSTANCE hInstance,
  _In_  HINSTANCE hPrevInstance,
  _In_  LPSTR lpCmdLine,
  _In_  int nCmdShow
);
А так она вызывается:
C++
    
 
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
ssXXss
264 / 186 / 10
Регистрация: 15.01.2011
Сообщений: 668
22.11.2013, 20:59     WinMain entry point #3
WinMain: The Application Entry Point
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.11.2013, 21:00     WinMain entry point #4
Хотя нет, второй тоже прототип, в общем там же на второй ссылке написан пример:

C++
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
{
    return 0;
}
Skitalec-x
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 10
22.11.2013, 21:10  [ТС]     WinMain entry point #5
Цитата Сообщение от programina Посмотреть сообщение
... в общем там же на второй ссылке написан пример...
[/CPP]
Спасибо за ответы! Как писать правильно - я понял. Но в чем же разница?
ssXXss
264 / 186 / 10
Регистрация: 15.01.2011
Сообщений: 668
22.11.2013, 21:19     WinMain entry point #6
перевод от google выдержки из текста ,ссылка выше :

WinMain функция идентична wWinMain , за исключением аргументы командной строки передаются в виде строки ANSI. Предпочтительным является версия Unicode. Вы можете использовать ANSI WinMain функцию, даже если вы компиляции программы как Unicode. Для получения копии Unicode из аргументов командной строки, вызовите GetCommandLine функцию. Эта функция возвращает все аргументы в одну строку. Если вы хотите аргументы как в агду массива стиле, пройти эту строку в CommandLineToArgvW .

оригинал :

The WinMain function is identical to wWinMain, except the command-line arguments are passed as an ANSI string. The Unicode version is preferred. You can use the ANSI WinMain function even if you compile your program as Unicode. To get a Unicode copy of the command-line arguments, call the GetCommandLine function. This function returns all of the arguments in a single string. If you want the arguments as an argv-style array, pass this string to CommandLineToArgvW.
MSDN
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.11.2013, 21:30     WinMain entry point #7
Skitalec-x, вот пример:

C++
#include <iostream>
using namespace std;
 
// это обьявление (или декларация, или прототип) функции, 
// попробуй закомментировать его и посмотри, 
// будет ли программа компилироваться
int func( int );
 
// точка входа
int main()
{
  int a = 5;
  cout << func(a) << endl;
}
 
// определение (дефиниция) функции func
int func(int d)
{
  return d; 
}
LuxArt
33 / 20 / 2
Регистрация: 14.11.2013
Сообщений: 85
22.11.2013, 21:30     WinMain entry point #8
Цитата Сообщение от Skitalec-x Посмотреть сообщение
В чем разница и как будет более правильно?
Вот что накопал в справочной системе
C++
1
2
#define WINAPI __stdcall
#define CALLBACK __stdcall
Получается нет разницы

CALLBACK, WINAPI, and APIENTRY are all used to define functions with the __stdcall calling convention. Most functions in the Windows API are declared using WINAPI. You may wish to use CALLBACK for the callback functions that you implement to help identify the function as a callback function.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 21:34     WinMain entry point
Еще ссылки по теме:

C++ Ошибка: undefined reference to `WinMain@16'
Точка входа отличная от main/WinMain C++
C++ WinMain@16 что это такое?
Ошибки undefined reference to `WinMain@16'; ld returned 1 exit status C++
Ошибка в коде undefined reference to 'WinMain' C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Skitalec-x
0 / 0 / 0
Регистрация: 22.11.2013
Сообщений: 10
22.11.2013, 21:34  [ТС]     WinMain entry point #9
Цитата Сообщение от LuxArt Посмотреть сообщение

Получается нет разницы
Большое спасибо!!!
Yandex
Объявления
22.11.2013, 21:34     WinMain entry point
Ответ Создать тему
Опции темы

Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru