-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
1

LNK2019 ссылка на неразрешенный внешний символ _WinMain@16 в функции "int _cdecl invoke_main(void)" (?invoke_main@@YAHX)

16.06.2019, 18:00. Показов 10024. Ответов 17
Метки нет (Все метки)

Разработать в Visual C++ приложение Win32, которое должно выполнять «перемещение файлов и каталогов». Каталоги должны перемещаться, копироваться и удаляться вместе с вложенными файлами и каталогами.

В свойствах проекта изменил: использование предкомпилированных заголовков отключил. Добавил comctl32.lib

В последствии вылетает ошибка (см.скрин).
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
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#include <locale.h>
#include <strsafe.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
typedef BOOL(__stdcall* LPSEARCHFUNC)(LPCTSTR lpszFileName, const LPWIN32_FILE_ATTRIBUTE_DATA lpFileAttributeData, LPVOID lpvParam);
BOOL __stdcall FileMove(LPCTSTR lpszFileName, const LPWIN32_FILE_ATTRIBUTE_DATA lpFileAttributeData, LPVOID lpvParam); // функция перемещения файлов и каталогов
BOOL FileOperation(LPCTSTR lpszFileName, LPCTSTR lpTargetDirectory, LPSEARCHFUNC lpFunc); // функция операции с файлом или каталогом
BOOL FileSearch(LPCTSTR lpszFileName, LPCTSTR lpszDirName, LPSEARCHFUNC lpSearchFunc, LPVOID lpvParam); // функция поиска внутри каталога
// ----------------------------------------------------------------------------------------------
int _tmain(int argc, LPTSTR argv[])
{
    _tsetlocale(LC_ALL, TEXT(""));
    if ((4 == argc) && (_tcscmp(argv[1], TEXT("/move")) == 0)) // перемещение файлов и каталогов
    {
        _tprintf(TEXT("> Перемещение \"%s\" в каталог \"%s\\\"\n"), argv[2], argv[3]);
        BOOL bRet = FileOperation(argv[2], argv[3], FileMove); // перемещение файла/каталога
        if (FALSE != bRet) _tprintf(TEXT("> Успешно!\n"));
        else _tprintf(TEXT("> Ошибка: %d\n"), GetLastError());
    } // if
    else
    {
        _tprintf(TEXT("/move <filename> <target>\n\n\\t<filename> - имя перемещаемого файла или каталога\n\\t<target> - каталог, в который нужно переместить файл или каталог\n\n"));
    } // else
} // _tmain
// ----------------------------------------------------------------------------------------------
BOOL __stdcall FileMove(LPCTSTR lpszFileName, const LPWIN32_FILE_ATTRIBUTE_DATA lpFileAttributeData, LPVOID lpvParam)
{
    LPCTSTR lpTargetDirectory = (LPCTSTR)lpvParam; // каталог, в который нужно переместить файл/каталог
    TCHAR szNewFileName[MAX_PATH]; // новое имя файла/каталога
    StringCchPrintf(szNewFileName, _countof(szNewFileName), TEXT("%s\\%s"), (LPCTSTR)lpTargetDirectory, PathFindFileName(lpszFileName));
    if (lpFileAttributeData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // нужно переместить каталог
    {
        BOOL bRet = CreateDirectoryEx(lpszFileName, szNewFileName, NULL); // создаём новый каталог (атрибуты копируются)
        if ((FALSE != bRet) || (GetLastError() == ERROR_ALREADY_EXISTS)) // (!) ошибка: Невозможно создать каталог, так как он уже существует.
        {
            bRet = FileSearch(TEXT("*"), lpszFileName, FileMove, szNewFileName); // продолжим поиск внутри каталога
        } // if
        if (FALSE != bRet)
        {
            bRet = RemoveDirectory(lpszFileName); // удаление каталог
        } // if
        return bRet;
    } // if
    return MoveFileEx(lpszFileName, szNewFileName, MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED);
} // FileMove
// ----------------------------------------------------------------------------------------------
BOOL FileOperation(LPCTSTR lpszFileName, LPCTSTR lpTargetDirectory, LPSEARCHFUNC lpFunc)
{
    if (NULL != lpTargetDirectory)
    {
        DWORD dwFileAttributes = GetFileAttributes(lpTargetDirectory);
        if (INVALID_FILE_ATTRIBUTES == dwFileAttributes) // (!) ошибка
        {
            return FALSE;
        } // if
        else if ((dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) // (!) не является каталогом
        {
            SetLastError(ERROR_PATH_NOT_FOUND);
            return FALSE;
        } // if
    } // if
    WIN32_FILE_ATTRIBUTE_DATA fad;
    BOOL bRet = GetFileAttributesEx(lpszFileName, GetFileExInfoStandard, &fad); // получение атрибутивной информации файла/каталога
    if (FALSE != bRet)
    {   
        bRet = lpFunc(lpszFileName, &fad, (LPVOID)lpTargetDirectory); // выполнение операции с файлом/каталогом
    } // if
    return bRet;
} // FileOperation
// ----------------------------------------------------------------------------------------------
BOOL FileSearch(LPCTSTR lpszFileName, LPCTSTR lpszDirName, LPSEARCHFUNC lpSearchFunc, LPVOID lpvParam)
{
    WIN32_FIND_DATA fd;
    TCHAR szFileName[MAX_PATH];
    StringCchPrintf(szFileName, MAX_PATH, TEXT("%s\\%s"), lpszDirName, lpszFileName); // формирование шаблона поиска
    HANDLE hFindFile = FindFirstFile(szFileName, &fd); // начало поиска
    if (INVALID_HANDLE_VALUE == hFindFile) return FALSE;
    BOOL bRet = TRUE;
    for (BOOL bFindNext = TRUE; FALSE != bFindNext; bFindNext = FindNextFile(hFindFile, &fd))
    {
        if (_tcscmp(fd.cFileName, TEXT(".")) == 0 || _tcscmp(fd.cFileName, TEXT("..")) == 0)
        {   
            continue; /* пропуск текущего и родительского каталога */
        } // if
        StringCchPrintf(szFileName, MAX_PATH, TEXT("%s\\%s"), lpszDirName, fd.cFileName); // формирование полного пути к файлу
        bRet = lpSearchFunc(szFileName, (LPWIN32_FILE_ATTRIBUTE_DATA)& fd, lpvParam);
        if (FALSE == bRet) break; // прерывание поиск
    } // for
    FindClose(hFindFile); // окончание поиска
    return bRet;
} // FileSearch
Миниатюры
LNK2019 ссылка на неразрешенный внешний символ _WinMain@16 в функции "int _cdecl invoke_main(void)" (?invoke_main@@YAHX)  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2019, 18:00
Ответы с готовыми решениями:

LNK2019: ссылка на неразрешенный внешний символ "int __cdecl GetDriveTypeW(wchar_t)"
Здравствуйте. Пишу программу для работы с дисками файловой системы windows. Вообщем сообственно...

Ошибка LNK2019 ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)"
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов...

Ссылка на неразрешенный внешний символ _main в функции "int __cdecl invoke_main(void)"
Имеется одна программа, скачанная из интернета. При компиляции пишет это: ...

Ссылка на неразрешенный внешний символ _main в функции "int__cdecl invoke_main(void)
KVITANTSIA.h #pragma once #ifndef KVITANTSIA_H #define KVITANTSIA_H #define at all #include...

17
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 18:09 2
Цитата Сообщение от xamelione25 Посмотреть сообщение
В последствии вылетает ошибка (см.скрин).
Посмотри свойства проекта ->Linker->System->SubSystem. Должно быть Console
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 18:57  [ТС] 3
oleg-m1973, Бредятина какая-та выскакивает
Миниатюры
LNK2019 ссылка на неразрешенный внешний символ _WinMain@16 в функции "int _cdecl invoke_main(void)" (?invoke_main@@YAHX)  
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 19:03 4
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, Бредятина какая-та выскакивает
В чём именно бредятина? То, что внизу - это так всегда пишется, когда консольное приложение из студии запускается. Если просто из командной строки, её не будет.

Добавлено через 1 минуту
Цитата Сообщение от xamelione25 Посмотреть сообщение
_tprintf(TEXT("/move <filename> <target>\n\n\\t<filename> - имя перемещаемого файла или каталога\n\\t<target> - каталог, в который нужно переместить файл или каталог\n\n"));
\t - не надо добавлять ещё один слэш - <target>\n\n\t<filename>
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 19:13  [ТС] 5
oleg-m1973, в том, что я планировал, что я буду вводить путь к файлу или каталогу текущему ... и второй строкой писать путь куда мне его нужно будет переместить
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 19:46 6
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, в том, что я планировал, что я буду вводить путь к файлу или каталогу текущему ... и второй строкой писать путь куда мне его нужно будет переместить
Покажи командную строку, как ты запускаешь свой exe
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 19:50  [ТС] 7
oleg-m1973, Я не могу экзешник запустить... у меня с дебагом собирается решение, а с релизом - нет. Я сейчас только через F5 запускаю. Если я при релизе запускаю, то у меня повторяется проблема из первого поста.
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 19:53 8
Цитата Сообщение от xamelione25 Посмотреть сообщение
Если я при релизе запускаю, то у меня повторяется проблема из первого поста.
Потому что в свойствах проекта разные конфигурации для дебага и релиза. Там сверху-слева есть Configuration
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 19:56  [ТС] 9
oleg-m1973,
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи командную строку, как ты запускаешь свой exe
... она не запускается ... точнее запускается, но на пол секунды и сразу же закрывается.
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 20:00 10
Цитата Сообщение от xamelione25 Посмотреть сообщение
Я сейчас только через F5 запускаю.
Запускай просто из командой строки. В студии тоже можно как-то параметры командной строки задавать, но я не помню как

Добавлено через 3 минуты
Цитата Сообщение от xamelione25 Посмотреть сообщение
... она не запускается ... точнее запускается, но на пол секунды и сразу же закрывается.
Запускай через Far., там видно будет, что она написала.
Ну, или поставь в конце main - _getch(), - #include <conio.h>
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 20:02  [ТС] 11
oleg-m1973,
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
main - _getch(), - #include <conio.h>
брррр .... ничего не понял
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 20:27 12
Лучший ответ Сообщение было отмечено xamelione25 как решение

Решение

Цитата Сообщение от xamelione25 Посмотреть сообщение
брррр .... ничего не понял
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <conio.h>
............................................................
int _tmain(int argc, LPTSTR argv[])
{
....................................................
 
    else
    {
        _tprintf(TEXT("/move <filename> <target>\n\n\\t<filename> - имя перемещаемого файла или каталога\n\\t<target> - каталог, в который нужно переместить файл или каталог\n\n"));
    } // else
 
_getch();
} // _tmain
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 20:57  [ТС] 13
oleg-m1973, оно запустилось ... но я не могу ввести пути к файлам ... оно вылетает по нажатию на любую клавишу
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 21:01 14
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, оно запустилось ... но я не могу ввести пути к файлам ... оно вылетает по нажатию на любую клавишу
Потому что их надо вводить как параметры командной строки:
WindowsProject4-3.exe /move c:\temp\file1.txt c:\temp\file2.txt
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 21:02  [ТС] 15
oleg-m1973, ааааа.. то есть производить запуск через cmd и там же задавать эти параметры???
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
16.06.2019, 21:06 16
Если ты хочешь, чтоб вводились с клавиатуры надо что-то типа
C++
1
2
3
4
5
6
7
        char file1[MAXPATH] = {0};
        char file2[MAXPATH] = {0};
 
        printf("file1: ");
        scanf("%s", file1);
        printf("file2: ");
        scanf("%s", file2);
Добавлено через 23 секунды
Цитата Сообщение от xamelione25 Посмотреть сообщение
oleg-m1973, ааааа.. то есть производить запуск через cmd и там же задавать эти параметры???
Да.
1
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 22:35  [ТС] 17
oleg-m1973,
Миниатюры
LNK2019 ссылка на неразрешенный внешний символ _WinMain@16 в функции "int _cdecl invoke_main(void)" (?invoke_main@@YAHX)  
0
-4 / 5 / 2
Регистрация: 04.02.2013
Сообщений: 1,619
16.06.2019, 22:50  [ТС] 18
oleg-m1973, Все вопрос по посту 17 аннулирован. Все работает нормально. СПС
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2019, 22:50
Помогаю со студенческими работами здесь

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt;...

LNK2019: ссылка на неразрешенный внешний символ "void __cdecl run(void)" (?run@@YAXXZ) в функции _wmain
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;cmath&quot; using namespace std; class A {...

error LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall KDocument::Open(char const *)" в функции _WinMain@16
ребята, при компиляции линковщик ругается, подскажите пожалуйста , вроде бы и Kdocument.h...

Ошибка : LNK2019 ссылка на неразрешенный внешний символ "public: void_thiscall person::show_data(void)"
Доброго времени суток. Помогите пожалуйста с программой, я недавно начал осваивать с++ и подобная...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru