Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185

Ошибка в определении стандартной API функции

27.06.2015, 21:41. Показов 1586. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Переписываю Бота по уроку из Ютьюба. Сейчас первый тест бота. Суть - найти в окне приложения определенный цвет пикселя и поместить туда курсор.

Ошибка в определении функции GetPixel() строка 76.Компилятор видит эту функции иначе?
Помогите пож.

Мейн файл.
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "Header_22062015.h"
 
std::string chosenColor;
 
 
 
void MainScan(ScanContents scan);
 
void ChekColor(COLORREF pixel, int x, int y);
 
bool ColorMatch(COLORREF pixel);
 
int main()
{
    std::string gameWindow;
    std::cout << "Enter game win. Name:" <<std::endl;
    //std::getline(std::cin, gameWindow);
    gameWindow = "1";//"Red_Black_Test - Paint";
 
    HWND appWnd = FindWindow(0, gameWindow.c_str());
    RECT rcClientPositioning;
 
    while(!appWnd)
    {
        system("CLS");
        appWnd = FindWindow(0, gameWindow.c_str());
        std::cout << "Lokking for" << gameWindow << std::endl;
        Sleep(1000);
    };
 
    std::cout << "Found" << gameWindow << std::endl;
 
    while(atoi(chosenColor.c_str()) < 1 || atoi(chosenColor.c_str()) > 3 )
    {
        system("CSL");
        std::cout << "Choose wich color triger against" <<
        "1.Red\n2.Green\n3.Blue"
        << std::endl;
        std::getline(std::cin, chosenColor);
    };
 
    std::string color;
    if(chosenColor == "1")color = "Red";
    else if(chosenColor == "2")color = "Green";
    else if(chosenColor == "3")color = "Blue";
    system("CLS");
 
    std::cout << "TrigerBot ONLINE, hover over" << color << " to shot..." << std::endl;
 
    GetWindowRect(appWnd, &rcClientPositioning);
 
    HDC hdcMain = GetDC(HWND_DESKTOP);
 
    int startingX = rcClientPositioning.right - ((rcClientPositioning.right - rcClientPositioning.left)/2);
 
    int startingY = rcClientPositioning.bottom - ((rcClientPositioning.bottom - rcClientPositioning.top)/2);
 
    ScanContents scan(startingX, startingY, hdcMain, 30, 40, -30, -30);
 
    MainScan(scan);
 
    system("pause");
 
    return 0;
};
 
void MainScan(ScanContents scan)
{
    int debugRunTime = clock();
    while(true)
    {
        for(int y = scan.StartY+scan.DeductY; y < scan.StartY+scan.CompareY; y++)
        {
            for(int x = scan.StartX+scan.DeductX; x < scan.StartX+scan.CompareX; x++)
            {
                //Sleep(100);
                //SetCurcorPos(0,0);
 
                ChekColor(extern "C" GetPixel(scan.Hdc, x, y), x, y);
                if(GetAsyncKeyState(VK_DELETE))
                {
                    exit(0);
                };
            };
        };
    };
};
 
void ChekColor(COLORREF pixel, int x, int y)
{
    if(ColorMatch(pixel))
    {
        mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
    };
};
 
bool ColorMatch(COLORREF pixel)
    {
    int r = GetRValue(pixel);
    int g = GetGValue(pixel);
    int b = GetBValue(pixel);
 
    //RED
    if(chosenColor =="1")
    {
        if(r>50 && g<40 && b<40)
        {
            return true;
        };
    }
    //Green
    else if(chosenColor =="2")
    {
        if(r<40 && g>50 && b<40)
        {
            return true;
        };
    }
    //Blue
    else if(chosenColor =="3")
    {
        if(r<40 && g<40 && b>50)
        {
            return true;
        };
    };
};
Хидер-файл
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
#include <windows.h>
#include <iostream>
#include <ctime>
#include <string>
#include <wingdi.h>
 
 
 
 
class ScanContents
{
 
public:
    int StartX;
    int StartY;
    int DeductX;
    int DeductY;
    int CompareX;
    int CompareY;
    HDC Hdc;
 
    ScanContents(
        int startX, int startY, HDC hdc, int compareX= 0,
        int compareY= 0, int deductX= 0, int deductY= 0)
        {
            StartX = startX;
            StartY = startY;
            CompareX = compareX;
            CompareY = compareY;
            DeductX = deductX;
            DeductY = deductY;
            Hdc = hdc;
        }
 
    //~ScanContents();
};
Ошибка:
||=== Build: Debug in 270615_BOT (compiler: GNU GCC Compiler) ===|
C:\Users\admin\Documents\CodeBlocks\2706 15_BOT\Main_22062015.cpp||In function 'void MainScan(ScanContents)':|
C:\Users\admin\Documents\CodeBlocks\2706 15_BOT\Main_22062015.cpp|69|warning: unused variable 'debugRunTime' [-Wunused-variable]|
C:\Users\admin\Documents\CodeBlocks\2706 15_BOT\Main_22062015.cpp||In function 'bool ColorMatch(COLORREF)':|
C:\Users\admin\Documents\CodeBlocks\2706 15_BOT\Main_22062015.cpp|128|warning: control reaches end of non-void function [-Wreturn-type]|
obj\Debug\Main_22062015.o||In function `Z8MainScan12ScanContents':|
C:\Users\admin\Documents\CodeBlocks\2706 15_BOT\Main_22062015.cpp|79|undefined reference to `GetPixel@12'|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|


Если я правильно понимаю, то компилятор видит стандартную функцию под другим именем?
Возможно надо как-то через extern "C" передать эту функцию?
Среда разработки КодБлокс и ДевС++ ошибка на разных компиляторах (ГНУ, ВС2010) одна и та-же...
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2015, 21:41
Ответы с готовыми решениями:

Ошибка в определении или объявлении функции
Доброго времени суток выдаёт ошибку 1&gt;c:\users\smaile\documents\visual studio 2010\projects\ыы\ыы\ыы.cpp(57): error C2264: check::~check:...

Вычислить якобиан векторной функции векторного аргумента с помощью стандартной функции
Доброго времени суток! пожалуйста помогите!! необходимо вычислить якобиан векторной функции векторного аргумента с помощью стандартной...

Вычислить значение функции e^x=1+x+x^2/2+x^3+3 и сравнить полученной результат c значением стандартной функции
Здраствуйте! Пожалуйста укажите услугу в помочи, вот задачка: Оформить у виде программы исчисленнои функции e^x=1+x+x^2/2+x^3+3 и...

8
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
27.06.2015, 23:14
Цитата Сообщение от MMt Посмотреть сообщение
extern "C"
Если это убрать?
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
27.06.2015, 23:29  [ТС]
убрано. нет результата.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
27.06.2015, 23:30
Цитата Сообщение от MMt Посмотреть сообщение
убрано. нет результата.
Если убрать, у меня, в 10-й студии, компилируется без ошибок.
0
Диванный эксперт
 Аватар для Max Dark
2530 / 2044 / 969
Регистрация: 09.10.2013
Сообщений: 4,729
Записей в блоге: 4
27.06.2015, 23:31
в настройках проекта добавить -lgdi32
где конкретно добавлять не скажу - Dev-C++ нет у меня
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
27.06.2015, 23:35  [ТС]
Крейзи, откуда инфа? обьясни, плиз. Чтоб знать где ошибка и чем она вызвана

Добавлено через 58 секунд
и куда добавлять, что это за команда?
0
Диванный эксперт
 Аватар для Max Dark
2530 / 2044 / 969
Регистрация: 09.10.2013
Сообщений: 4,729
Записей в блоге: 4
27.06.2015, 23:38
Лучший ответ Сообщение было отмечено MMt как решение

Решение

Цитата Сообщение от MMt Посмотреть сообщение
undefined reference to `GetPixel@12'
у вас не подключена библиотека gdi32
где это делается в DevC++ я не знаю, смотрите в свойствах проекта
1
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
27.06.2015, 23:43  [ТС]
я изменил свойства проекта с консольного на GDI- заработало, спасибо. попробую в других ИДЕ покопаться
0
Неэпический
 Аватар для Croessmah
18124 / 10708 / 2063
Регистрация: 27.09.2012
Сообщений: 26,998
Записей в блоге: 1
28.06.2015, 08:13
Цитата Сообщение от MMt Посмотреть сообщение
Крейзи, откуда инфа?
Например, на https://msdn.microsoft.com/ru-... 85%29.aspx
внизу в табличке написано в какой либе лежит функция
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2015, 08:13
Помогаю со студенческими работами здесь

Написать функции сравнения строк, эквивалентные стандартной функции strcmp
Здравствуйте! Помогите, пожалуйста, с задачкой) Написать программу, содержащую две пользовательские функции сравнения строк,...

Написать две пользовательские функции, эквивалентные стандартной функции strlen
Написать программу, содержащую две пользовательские функции определения длины строки, эквивалентные стандартной функции strlen. Первая из...

Написать программу, содержащую две функции, сравнения строк, эквивалентные стандартной функции strcmp
Добрый вечер, многоуважаемые гуру программирования. Прошу помочь написать одну программу, собственно, вот она: &quot;Написать программу,...

Прошу совета в определении функции
Доброго времени суток. Допустим, есть задача написать функцию, которая возвращает степень двойки в ответ на переданное ей значение...

Программа для определении функции
Определить функцию возводящую число a в степень n


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
Реляционная модель и правила Кодда: фундамент современных баз данных
Codd 05.04.2025
Конец 1960-х — начало 1970-х годов был периодом глубоких трансформаций в области хранения и обработки данных. На фоне растущих потребностей бизнеса и правительственных структур существовавшие на тот. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер