2014-01-04 5 views
0

Я пытаюсь написать свою первую программу в Visual Studio, однако меня беспокоит ошибка. Он говорит: -Ошибка LNK2019 в визуальной студии в приложении win32?

Error 3 error LNK2019: unresolved external symbol [email protected] referenced in function ___tmainCRTStartup  
E:\Documents\Programming\Software Development\Microsoft Development\Microsoft Development\MSVCRTD.lib(wcrtexew.obj) 
Microsoft Development 

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

wWinMainCRTStartup 

набор символов Unicode

подсистема утешать. Проект представляет собой приложение win32. Код выглядит следующим образом: -

#include <windows.h> 
#include <stdio.h> 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
    { 
    MessageBox(NULL, "Hello World!", "Note", 1/*MB_OK*/); 
    printf("nCmdShow = %d\n", nCmdShow); 
    return 0; 
} 

Как исправить эту проблему?

P.S. Я использую Visual Studio Ultimate 2013

ответ

0

Для Unicode построить ваш код должен быть больше, как это:

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPWSTR lpCmdLine, int nCmdShow) 
    { 
    MessageBox(NULL, L"Hello World!", L"Note", 1/*MB_OK*/); 
    printf(L"nCmdShow = %d\n", nCmdShow); 
    return 0; 
} 

По крайней мере, по умолчанию это будет установлено использовать подсистему для Windows (так как точка входа называется вариант WinMain). Вы можете принудить к подсистеме консоли (-subsystem:console флага линкера) или получить, что это произойдет по умолчанию, изменяя точку входа к варианте main вместо:

int wmain(int argc, wchar_t **argv) { // ... 

Очевидно, что вы не сможете распечатать nCmdShow, используя это хотя (не то, что это действительно означает что-либо в консольной программе). В этом отношении, так как вы не используете аргументы командной строки в любом случае, вы можете упростить это несколько для:

int wmain(){ // .... 

На самом деле, nCmdShow в основном устарели даже для оконных программ. В первый раз, когда оконная программа вызывает ShowWindow, она обычно передает nCmdShow в качестве параметра. Windows, в свою очередь, игнорирует значение, переданное при первом вызове ShowWindow, и вместо этого использует значение из структуры процесса STARTUPINFO. Только в последующих вызовах ShowWindow используется параметр (и для этих последующих вызовов вы также не должны пропускать nCmdShow - вы должны пройти одну из определенных констант, таких как SW_SHOWNORMAL).

Справка: MSDN entry for ShowWindow

0

Приложение Win32 начинается с WinMain. Консольное приложение начинается с основного. Ваш вопрос подразумевает, что у вас запутанная смесь двух.

Просто используйте команду «Файл», «Создать», «Проект», чтобы Visual Studio построила скелет типа приложения, которое вы имеете в виду.