Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71

Error LNK2019: ссылка на неразрешенный внешний символ

01.09.2011, 13:30. Показов 3362. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Товарищи, начал изучать DirectX 10 по книге Алексея Попова и столкнулся с проблемами.
Какие-то сам разобрал прежде чем сюда писать, но одна до сих пор осталась не решенная.
Возможно что-то подобное вам тут на форуме уже писали, но прочел некоторые посты и ничего для себя не нашел.

в общем сама проблема:

error LNK2019: ссылка на неразрешенный внешний символ "long __cdecl InitWindow(struct HINSTANCE__ *,int)" (?InitWindow@@YAJPAUHINSTANCE__@@H@Z) в функции _WinMain@16

Этот урок называется МИНИМАЛЬНОЕ ПРИЛОЖЕНИЕ WINDOWS Автор в книге использует VS 2005 Я использую VS 2010.
Писал ручками без копи паста!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <Windows.h>
 
//Ширина и высота окна
#define WINDOW_WIDTH  640
#define WINDOW_HEIGHT 480
 
//Глобальные переменные 
HWND  g_hWnd = NULL;
 
//Прототипы Функции
HRESULT InitWindow (HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);
 
 
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    if ( FAILED(InitWindow( hInstance, nCmdShow)))
        return 0;
    //цикл обработки сообщений
 
    MSG msg = {0};
    while ( GetMessage( &msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
}  
 
//Регистрация класса и создания окна и его параметров
 
HRESULT InitWindows(HINSTANCE hInstance, int nCmdShow)
{
    // регистрируем класс окна
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style  = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = NULL;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = L"SimpleWindowsClass";
    wc.hIconSm  = LoadIcon(NULL,IDI_APPLICATION);
    if( !RegisterClassEx(&wc))
        return E_FAIL;
 
    //Создаем окно
    g_hWnd = CreateWindow(
        L"SimpleWindowClass",
        L"SUKA",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        WINDOW_WIDTH,
        WINDOW_HEIGHT,
        NULL,
        NULL,
        hInstance,
        NULL);
 
    //Если не удалось создать окно то выходим из функции
    if(!g_hWnd)
        return E_FAIL;
    //Отображаем окно на экране
    ShowWindow( g_hWnd, nCmdShow);
    UpdateWindow(g_hWnd);
    return S_OK;
}
 
//Обработка сообщений
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_DESTROY: PostQuitMessage(0); break;
    default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Код такой же, но вот этот из примера который на диске. Вот я допустим вообще не вижу разницы и он работает !! !!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//--------------------------------------------------------------------------------------
//  Простейшее оконное приложение для Windows
//--------------------------------------------------------------------------------------
 
#include <windows.h>
 
// Ширина и высота окна
#define WINDOW_WIDTH  640
#define WINDOW_HEIGHT 480
 
 
//--------------------------------------------------------------------------------------
// Глобальные переменные
//--------------------------------------------------------------------------------------
HWND        g_hWnd = NULL;
 
//--------------------------------------------------------------------------------------
// Прототипы функций
//--------------------------------------------------------------------------------------
HRESULT             InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
 
//--------------------------------------------------------------------------------------
// С этой функции начинается выполнение программы
//--------------------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    if( FAILED( InitWindow( hInstance, nCmdShow ) ) )
        return 0;
 
    // Цикл обработки сообщений
    MSG msg = {0};
    while( GetMessage( &msg, NULL, 0, 0 ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
 
    return (int) msg.wParam;
}
 
//--------------------------------------------------------------------------------------
// Регистрация класса и создание окна
//--------------------------------------------------------------------------------------
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow )
{
    // Регистрируем класс окна
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.style          = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc    = WndProc;
    wc.cbClsExtra     = 0;
    wc.cbWndExtra     = 0;
    wc.hInstance      = hInstance;
    wc.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName   = NULL;
    wc.lpszClassName  = L"SimpleWindowClass";
    wc.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    if( !RegisterClassEx(&wc) )
        return E_FAIL;
 
    // Создаем окно
    g_hWnd = CreateWindow(
        L"SimpleWindowClass", 
        L"Простейшее приложение для Windows", 
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 
        CW_USEDEFAULT, 
        WINDOW_WIDTH,
        WINDOW_HEIGHT,
        NULL,
        NULL,
        hInstance,
        NULL);
 
    //Если не удалось создать окно - выходим из функции
    if( !g_hWnd )
        return E_FAIL;
    //Отображаем окно на экране
    ShowWindow( g_hWnd, nCmdShow );
    UpdateWindow(g_hWnd);
   
    return S_OK;
}
 
//--------------------------------------------------------------------------------------
// Обработка сообщений
//--------------------------------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{    
    switch (message) 
    {
        
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
 
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
 
    return 0;
}

Вопрос, в чем тут подвох?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2011, 13:30
Ответы с готовыми решениями:

Error LNK2019: ссылка на неразрешенный внешний символ...
пишу прогу, которая выводит список файлов в папке и дату их последнего изменения. Но выбивает ошибки: Ошибка 2 error LNK2019: ссылка...

Error LNK2019: ссылка на неразрешенный внешний символ
Недавно начал учить visual c++, столкнулся с проблемой и незню как исправить, укажите пожалуйста на мою ошибку. Программа должна рисовать...

Error LNK2019: ссылка на неразрешенный внешний символ
Привет всем, я начинающий в этом деле человек так что не серчайте сильно. У меня проблема присоздании toolbar, выдает вот такую ошибку, я...

11
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.09.2011, 13:34
Строки 12 и 35. Найди различия в слове InitWindows.
Внимательнее надо быть, внимательнее.

Добавлено через 1 минуту
А вот за то, что писал ручками, можешь печенюшку взять! Это нынче редкость. Я про печенюшки...
1
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
01.09.2011, 13:37  [ТС]
Цитата Сообщение от Maikl Til Посмотреть сообщение
Вопрос, в чем тут подвох?


не прошло и 5 минут как я заметил что написал по привычке windowS!

C++
1
2
3
4
5
//Регистрация класса и создания окна и его параметров
 
HRESULT InitWindows(HINSTANCE hInstance, int nCmdShow)
{
        // регистрируем класс окна
в принципе проблема ушла. но появилась другая =)))


Программа "[2676] TEST.exe: Машинный код" завершилась с кодом 0 (0x0).

Есть какие-то мысли ?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.09.2011, 13:46
Есть. 0 это код успешного завершения программы. Радуйся.)
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
01.09.2011, 13:50  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Есть. 0 это код успешного завершения программы. Радуйся.)

не не не, вот когда напишу большую прогу тогда буду радоваться, а пока нельзя расслабляться!

Дык, то что я написал должно выдавать созданное окно, а не закрываться с успешно выполненным кодом =)


Получается, вот этот код завершает работу программы!

C++
1
2
3
4
5
6
7
    //Если не удалось создать окно то выходим из функции
    if(!g_hWnd)
        return E_FAIL;
    //Отображаем окно на экране
    ShowWindow( g_hWnd, nCmdShow);
    UpdateWindow(g_hWnd);
    return S_OK;
Так как окно по каким то причинам не было создано! =((( и меня это пока не радует ((
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.09.2011, 13:58
После создания окна вызови GetLastError и посмотри что за ошипка.
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
01.09.2011, 14:02  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
После создания окна вызови GetLastError и посмотри что за ошипка.

mainone.cpp(54): error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
mainone.cpp(54): error C2660: CreateWindowExW: функция не принимает 8 аргументов
mainone.cpp(54): error C2143: синтаксическая ошибка: отсутствие ";" перед ","
mainone.cpp(54): error C2059: синтаксическая ошибка: )

СБОЙ построения.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.09.2011, 14:10
А это компилятор обиделся на ругательное название окна.
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
01.09.2011, 14:26  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
А это компилятор обиделся на ругательное название окна.

Ха ))) Да брось ты )) Он вообще не понимает значения такого слова =)

В общем переделал на вот так вот:

C++
1
2
3
    //Создаем окно
    g_hWnd = CreateWindowA(L"SimpleWindowsClass", L"asfaf", WS_OVERLAPPEDWINDOW, 0, 0,
640, 480, NULL, NULL, hInstance, NULL);
и теперь он мне пишет:

mainone.cpp(54): error C2664: CreateWindowExA: невозможно преобразовать параметр 2 из "const wchar_t [19]" в "LPCSTR"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.09.2011, 14:34
Цитата Сообщение от Maikl Til Посмотреть сообщение
для преобразования требуется reinterpret_cast
Нет. Нужно почитать про различие между CreateWindowA и CreateWindowW.
0
 Аватар для Maikl Til
12 / 12 / 1
Регистрация: 19.03.2010
Сообщений: 71
01.09.2011, 15:01  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Нет. Нужно почитать про различие между CreateWindowA и CreateWindowW.
А ты не мог бы написать отличие между ними ?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
01.09.2011, 15:44
char и wchar_t соответственно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2011, 15:44
Помогаю со студенческими работами здесь

Error LNK2019: ссылка на неразрешенный внешний символ
Короче перешел я с XP на семерку и тут появилась такая фигня. Те проекты которые нормально работали в XP не хотят компилироваться в...

Error LNK2019: ссылка на неразрешенный внешний символ
Здравствуйте! Пишу приложение на MFC с использованием OpenGL. Возникла такая проблема... При компилляции выдается много ошибок типа: ...

Error LNK2019: ссылка на неразрешенный внешний символ
Такая ошибка, не знаю как исправить: error LNK2019: ссылка на неразрешенный внешний символ &quot;unsigned int __cdecl discrete(float *...

Error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup
Создал консольное приложение (в том-то и проблемма). И вот ошибка! error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в...

Error LNK2019: ссылка на неразрешенный внешний символ _calc в функции _main
Я пишу програму на язике C--&gt; ASM(в среде Visual Studio 2008) ! Вот код : #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru