• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Первый проект Microsoft Visual Studio 2008

  • Автор темы protur
  • Дата начала
P

protur

Помогите пожалуйста создать первый проект под Windows. Не могу скомпилировать не один пример, даже такой простой. Новый проект: File->New->Project->Win32Project
#include <windows.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, PTSTR,int){
MessageBox(0, "Здраствуй, Мир!", "Ты прекрасен!", 0);
return 0;
}

Не компилируется, вот ошибки:
c:\documents and settings\userxp\мои документы\visual studio 2008\projects\1\1\11.cpp(3) : error C2731: 'WinMain' : function cannot be overloaded
c:\documents and settings\userxp\мои документы\visual studio 2008\projects\1\1\11.cpp(3) : see declaration of 'WinMain'
c:\documents and settings\userxp\мои документы\visual studio 2008\projects\1\1\11.cpp(4) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [16]' to 'LPCWSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Заранее спасибо
 
D

demetrius2003

По-моему, чтоб использовать winmain в таком виде надо сообщить компилятору, что уже есть точка входа:
#pragma comment(linker,"/ENTRY:WinMain")
Ну, или типа того. А в messagebox просто параметры не верны. Смотрите внимательнее справку. Как то так. К сожалению студии под рукой нет, поэтому проверить правильность своих утверждений пока не могу.
 
L

lazybiz

protur
Попробуй вот так:
C++:
#include <windows.h>

int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpCmdLine, int nCmdShow )
{
MessageBox( NULL, "Ты прекрасен!", "Здраствуй, Мир!", MB_OK );
return 0;
}
 
D

DarkKnight

MessageBox(0, "Здраствуй, Мир!", "Ты прекрасен!", 0);
Все в точности как описал lazybiz , но у тебя еще есть одна проблема у тебя подключен Юникод ;-)
Так что вызывай
C++:
MessageBoxA(0, "Здраствуй, Мир!", "Ты прекрасен!", 0); //Это анси-версия, либо отключай Юникод,
//либо
#define MessageBox MessageBoxA

Добавлено: Либо все же в Юникоде :)
C++:
MessageBoxW(NULL,L"Test",L"test",MB_OK);
MessageBox(NULL,L"Test",L"test",MB_OK);
 
D

DarkKnight

Зато отднозначный вызов A или W
или
#define однозначное определение
Хороший является хорошим тоном, и удаляет пробелы в понимании работы с Win-Api....

На скрине показанно где определяется Ansi для проекта (жаль только русская версия есть)
 

Вложения

  • uni.jpg
    uni.jpg
    87,6 КБ · Просмотры: 543
D

DarkKnight

European , Euro, Майкрософт вообще заявила, пишите все с Юникоде... :)
И ты знаешь, отчасти они правый... Я щас на 7ки сижу... И в консольном приложении заголовок окна поменять с Ansi вызовом уже не прокатывает.... Сам в шоке правда был..
C++:
void main(void)
{
setlocale(LC_ALL,"Russian");
SetConsoleTitleW(L"Игра 'Веселые кости'");
srand(time(NULL));
 
L

lazybiz

По-моему автора темы и след простыл... Может стоит ее закрыть!?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!