Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2015, 21:41     Ошибка в определении стандартной API функции #1
Переписываю Бота по уроку из Ютьюба. Сейчас первый тест бота. Суть - найти в окне приложения определенный цвет пикселя и поместить туда курсор.

Ошибка в определении функции 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\270615_BOT\Main_22062015.cpp||In function 'void MainScan(ScanContents)':|
C:\Users\admin\Documents\CodeBlocks\270615_BOT\Main_22062015.cpp|69|warning: unused variable 'debugRunTime' [-Wunused-variable]|
C:\Users\admin\Documents\CodeBlocks\270615_BOT\Main_22062015.cpp||In function 'bool ColorMatch(COLORREF)':|
C:\Users\admin\Documents\CodeBlocks\270615_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\270615_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) одна и та-же...
Спасибо!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
27.06.2015, 23:14     Ошибка в определении стандартной API функции #2
Цитата Сообщение от MMt Посмотреть сообщение
extern "C"
Если это убрать?
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2015, 23:29  [ТС]     Ошибка в определении стандартной API функции #3
убрано. нет результата.
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
27.06.2015, 23:30     Ошибка в определении стандартной API функции #4
Цитата Сообщение от MMt Посмотреть сообщение
убрано. нет результата.
Если убрать, у меня, в 10-й студии, компилируется без ошибок.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
27.06.2015, 23:31     Ошибка в определении стандартной API функции #5
в настройках проекта добавить -lgdi32
где конкретно добавлять не скажу - Dev-C++ нет у меня
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2015, 23:35  [ТС]     Ошибка в определении стандартной API функции #6
Крейзи, откуда инфа? обьясни, плиз. Чтоб знать где ошибка и чем она вызвана

Добавлено через 58 секунд
и куда добавлять, что это за команда?
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
27.06.2015, 23:38     Ошибка в определении стандартной API функции #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MMt Посмотреть сообщение
undefined reference to `GetPixel@12'
у вас не подключена библиотека gdi32
где это делается в DevC++ я не знаю, смотрите в свойствах проекта
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
27.06.2015, 23:43  [ТС]     Ошибка в определении стандартной API функции #8
я изменил свойства проекта с консольного на GDI- заработало, спасибо. попробую в других ИДЕ покопаться
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2015, 08:13     Ошибка в определении стандартной API функции
Еще ссылки по теме:

Ошибка при определении массива C++
C++ Синтаксическая ошибка при определении массива
C++ Ошибка при определении макроса

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11813 / 6792 / 769
Регистрация: 27.09.2012
Сообщений: 16,857
Записей в блоге: 2
Завершенные тесты: 1
28.06.2015, 08:13     Ошибка в определении стандартной API функции #9
Цитата Сообщение от MMt Посмотреть сообщение
Крейзи, откуда инфа?
Например, на https://msdn.microsoft.com/ru-ru/lib...=vs.85%29.aspx
внизу в табличке написано в какой либе лежит функция
Yandex
Объявления
28.06.2015, 08:13     Ошибка в определении стандартной API функции
Ответ Создать тему
Опции темы

Текущее время: 13:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru