С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для Galadriel1987
2 / 2 / 1
Регистрация: 23.03.2013
Сообщений: 60

Ошибки LNK2001 и С2664 в Visual Studio 2008

02.12.2015, 20:49. Показов 2026. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! При написании простой программы запуска Блокнота у меня возникла проблема с Кодировкой. При включенном параметре "Использовать Юникод" выдается ошибка:

Main.cpp(24) : error C2664: CreateProcessW: невозможно преобразовать параметр 2 из 'const char [12]' в 'LPWSTR'

При включенном параметре "Использовать многобайтовую кодировку" появляется сообщение:

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main (запрещенный внешний символ).

Если честно, я в C++ программы еще не пишу - я их должна только в следующем году учить. Эта программа - текст из Лабораторной, которую я переписала символ в символ (с синтаксисом у меня всегда были проблемы, поэтому я в первую очередь проверяю свой текст.

Вот текст программы:

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
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
 
void tmain(int argc, TCHAR *argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
 
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory ( &pi, sizeof(pi) );
 
//
if( !CreateProcess( NULL,
"notepad.exe",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
 
}
 
//
WaitForSingleObject( pi.hProcess, INFINITE );
 
//
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Я совсем запуталась: вот здесь - http://habrahabr.ru/post/164193/ рассказано обо всех кодировках, но я ума не приложу, как это использовать. Меняла void tmain на int main и tchar на wchar_t. Все без толку.
Еще нашла вот здесь - LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main упоминание о типе проекта. Проверила - тип проекта - Приложение Win32. Проект "чистый", сделанный не в Мастере.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2015, 20:49
Ответы с готовыми решениями:

как искать ошибки? и какой лучше учебник почитать по visual studio 2008
подскажите можно ли сделать на visual studio 2008 pro что бы строка с ошибкой выделялась цветом ото просто пишет что ошибка и приходится...

Проблемы при создании и построении проекта Microsoft Visual Studio 2008 Ошибки!
Проблемы при создании и построении проекта Microsoft Visual Studio 2008. Ошибки!!!

Visual Studio 2005 и Visual Studio 2008 сильно ли они отличаются друк от друга?
привет ребята:) вот у меня есть Visual Studio 2005 и Visual Studio 2008 возник вопрос сильно ли они отличаются друк от друга? пробывал...

12
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.12.2015, 20:58
C++
1
L"notepad.exe"
Все функции с W принимают юникод-строки.
0
 Аватар для Galadriel1987
2 / 2 / 1
Регистрация: 23.03.2013
Сообщений: 60
02.12.2015, 21:01  [ТС]
Спасибо, но уже "опробовала" - никак! L я добавляла в первую очередь, так как на Хабрахабре об этом написано.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
02.12.2015, 21:05
Попробовал
C++
1
2
3
if( !CreateProcess( NULL,
L"notepad.exe",
...
Прекрасно компилируется!
0
 Аватар для Galadriel1987
2 / 2 / 1
Регистрация: 23.03.2013
Сообщений: 60
02.12.2015, 21:10  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
if( !CreateProcess( NULL, L"notepad.exe", ...
Хорошо, сейчас еще раз попробую. А void tmain на int main менять не надо?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
02.12.2015, 21:15
int main - это стандарт.
0
 Аватар для Galadriel1987
2 / 2 / 1
Регистрация: 23.03.2013
Сообщений: 60
03.12.2015, 14:24  [ТС]
Что значит стандарт? Заменить void tmain на int main?
Надо просто написать вместо
void tmain(int argc, TCHAR *argv[])
Вот это:
int wmain(int argc, wchar_t *argv[], wchar_t *envp[]);

Вот скриншоты с ошибками (сделала вложением):
Миниатюры
Ошибки LNK2001 и С2664 в Visual Studio 2008   Ошибки LNK2001 и С2664 в Visual Studio 2008  
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.12.2015, 16:17
Так оно заработало?
0
 Аватар для Galadriel1987
2 / 2 / 1
Регистрация: 23.03.2013
Сообщений: 60
03.12.2015, 16:27  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Так оно заработало?
Нет, так и не заработало - по прежнему эти две ошибки в разных версиях кодировки. Очень жаль.
Радует одно - столько умных людей прочитало и все такие же как я - чайники, не в состоянии сказать новичку, что делать .
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.12.2015, 16:33
В первом случае отключен юникод, значит L перед строкой не нужен.
У тебя, вероятно, неправильный тип проекта. Создай новый и выбери там "Консольное приложение win32". У тебя не консольное.
1
 Аватар для Galadriel1987
2 / 2 / 1
Регистрация: 23.03.2013
Сообщений: 60
03.12.2015, 17:03  [ТС]
Да я уже создавала и консольное, и даже какое-то ATL, в общем, у меня уже 7 проектов CreateProcess, которые я без конца удаляю

Добавлено через 25 минут
Цитата Сообщение от zss Посмотреть сообщение
Попробовал
C++
Выделить код
1
2
3
if( !CreateProcess( NULL,
L"notepad.exe",
...
Прекрасно компилируется!
Дайте скриншот, пожалуйста, чтобы я могла приложить его к отчету. И как у Вас оно заработало, если у меня в исходном тексте нет этого самого "Стандартного" int main()? Без которого, как Вы говорите, оно и не работает вовсе?
Почему же у Вас тогда заработало? Или вы издеваетесь?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.12.2015, 17:27
Чтобы стандартный main() был, надо создать пустой проект, а потом добавить в него новый файл .cpp и вручную написать там main().
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
03.12.2015, 17:49
Я компилировал это
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
#include <windows.h>
#include <stdio.h>
#include <conio.h>
//#include <tchar.h>
 
int main()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
 
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory ( &pi, sizeof(pi) );
 
    //
    if( !CreateProcess( NULL,
        L"notepad.exe",
        NULL,
        NULL,
        FALSE,
        0,
        NULL,
        NULL,
        &si,
        &pi )
        )
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return 1;
 
    }
 
    //
    WaitForSingleObject( pi.hProcess, INFINITE );
 
    //
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    _getch();
    return 0;
}
Нашел интересное замечание в описании
lpCommandLine
The command line to be executed. The maximum length of this string is 32,768 characters, including the Unicode terminating null character. If lpApplicationName is NULL, the module name portion of lpCommandLine is limited to MAX_PATH characters.

The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.
В соответствии с ним надо писать
C++
1
2
3
4
5
 wchar_t AppName[]=L"notepad.exe";
    //
    if( !CreateProcess( NULL,
        AppName,
...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2015, 17:49
Помогаю со студенческими работами здесь

Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual studio 2008
Скажите если я напишу программу на C# в MS Visual studio 2012 на framework 3.5 я потом смогу открыть проект моей программы на MS Visual...

Как открыть проект созданный в Visual Studio 2012 в Visual Studio 2008?
Нашел здесь же тему открытия Visual Studio 2012 в Visual Studio 2010 там написано так. Открыть файл проекта (.sln) с помощью блокнота и...

Конвертация(или сохранение) проектов Visual Studio 2008 c# в Visual Studio 2005 c#
Доброго времени суток =) Можно ли, конвертировать проект или же сохранить под другую версию программы(например MS Word 2007 может...

Как проект на visual studio 2012 открыть на visual studio 2008
Программа(курсовая) создана на 2012, надо показать и чтобы работала на 2008. Подскажите пожалуйста как решить данную проблему?

Отличие сборок Visual Studio 2008 от Visual Studio 2010
Здравствуйте, товарищи! Пытаюсь собрать библиотеку libvbucket, используя Visual Studio 2008. Проблема в том, что библиотека...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru