С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
1

Error C2664: Преобразование аргументов

14.04.2016, 00:05. Просмотров 1182. Ответов 13
Метки нет (Все метки)

При компиляции выскочили следующие ошибки:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
1>dllmain.cpp(38): error C2664: "uintptr_t _beginthread(void (__cdecl *)(void *),unsigned int,void *)": невозможно преобразовать аргумент 1 из "void (__stdcall *)(void *)" в "void (__cdecl *)(void *)"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
1>dllmain.cpp(56): error C2664: "void SAMPFramework::addClientCommand(char *,CMDPROC)": невозможно преобразовать аргумент 2 из "void (__stdcall *)(char *)" в "CMDPROC"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
1>dllmain.cpp(57): error C2664: "void SAMPFramework::addClientCommand(char *,CMDPROC)": невозможно преобразовать аргумент 2 из "void (__stdcall *)(char *)" в "CMDPROC"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
1>dllmain.cpp(58): error C2664: "void SAMPFramework::addClientCommand(char *,CMDPROC)": невозможно преобразовать аргумент 2 из "void (__stdcall *)(char *)" в "CMDPROC"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости
1>dllmain.cpp(191): error C2664: "uintptr_t _beginthread(void (__cdecl *)(void *),unsigned int,void *)": невозможно преобразовать аргумент 1 из "void (__stdcall *)(void *)" в "void (__cdecl *)(void *)"
1>          Конечному типу не соответствует ни одной функции с данным именем в области видимости


38 строка:
Кликните здесь для просмотра всего текста
C++
1
_beginthread(reconnectThread, NULL, NULL);

191 строка:
Кликните здесь для просмотра всего текста
C++
1
_beginthread(mainThread, NULL, NULL);

56 строка = 57 и 58 строки:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pSAMP->addClientCommand("test", cmd_test);
// функция:
void SAMPFramework::addClientCommand(char *szCmd, CMDPROC pFunc)
{
    if (g_Input == nullptr)
        return;
 
    void(__thiscall *AddClientCommand) (const void *_this, char *szCommand, CMDPROC pFunc) =
        (void(__thiscall *) (const void *, char *, CMDPROC)) (dwSAMPAddr + SAMP_FUNC_ADDCLIENTCMD);
 
    if (szCmd == NULL)
        return;
 
    return AddClientCommand(g_Input, szCmd, pFunc);
}
//
void cmd_test(char *szParams)
{
    pSAMP->addMessageToChat(0xFFFFFFFF, "Test command with params: "%s"", szParams);
}

Помогите исправить это пожалуйста.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2016, 00:05
Ответы с готовыми решениями:

Error 1 error C2664: 'CharToOemW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
выдает вот такую ошибку - Error 1 error C2664: 'CharToOemW' : cannot convert...

error C2664
Помогите пожалуйста исправить ошибку : ошибка: Ошибка 1 error C2664: void...

error C2664
ошибка: error C2664: 'strcmp' : cannot convert parameter 1 from 'int' to...

Ошибка error C2664
Не могу понять в чем ошибка, все из-за того что поменял компилятор, старый...

Ошыбка - error C2664
Тренируюсь по видео уроку писать игрушку волейбол и возникла ошибка - error...

13
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
14.04.2016, 09:17 2
Соглашение о вызове не совпадает. _beginthread() ожидает cdecl, а ты передаёшь stdcall.
1
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
14.04.2016, 23:02  [ТС] 3
up.
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
14.04.2016, 23:26 4
Ты исправил?
0
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
15.04.2016, 01:26  [ТС] 5
nmcf, нет, не пойму где это исправлять надо, функции _beginthread нет ни в каком файле.

Добавлено через 9 минут
В process.h нашел обьявление и определение beginthread, может поможет чем-то.
C++
1
2
3
_CRTIMP uintptr_t __cdecl * _beginthread (_In_ void (__cdecl * _StartAddress) (void *),
        _In_ unsigned _StackSize, _In_opt_ void * _ArgList);
_CRTIMP void __cdecl _endthread(void);
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
15.04.2016, 08:45 6
reconnectThread() и mainThread() как объявлены? Сделай, чтобы они __cdecl были.
Это что за библиотека вообще?
0
DrOffset
9015 / 4861 / 1197
Регистрация: 30.01.2014
Сообщений: 7,943
15.04.2016, 10:14 7
Цитата Сообщение от nmcf Посмотреть сообщение
Это что за библиотека вообще?
Это CRT API Винды. Функции для создания потока.

По теме: автор, не надо сюда постить библиотечный код. Пости свой.
Объявления своих функций mainThread и reconnectThread покажи.
0
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
18.04.2016, 14:07  [ТС] 8
DrOffset,
Цитата Сообщение от DrOffset Посмотреть сообщение
Объявления своих функций mainThread и reconnectThread покажи.
C++
1
2
3
4
void mainThread(void *pvParams)
{
 
}
reconnectThread не нужно.
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 14:22 9
Лучший ответ Сообщение было отмечено Vasiliyy как решение

Решение

А так?
C++
1
void __cdecl mainThread(void *pvParams)
1
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
18.04.2016, 15:22  [ТС] 10
nmcf, да спасибо, скомпилировалось, но при проверке через пару сек - краш. Буду выяснять как исправить
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 15:30 11
Ну дело уже не в _beginthread(), значит.
А зачем ты эти странные функции используешь? Есть же <thread>.
0
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
18.04.2016, 15:46  [ТС] 12
nmcf, такое было в одном плагине, и я весь его состав перекидаю в другой. Я выяснил причину краша, тут не выполняется условие:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//main.cpp
while (!pSAMP->tryInit()) Sleep(100);
// .h файл
#define SAMP_INFO_OFFSET    0x21A0F8
struct stSAMP *getInfo(void) { return g_SAMP; };
bool tryInit(void)
{
    CLog::Write("tryInit(void)");
    g_SAMP = *(stSAMP **) (dwSAMPAddr + SAMP_INFO_OFFSET);
    if (g_SAMP == nullptr)
    {
        CLog::Write("g_SAMP == nullptr");
        return false;
    }
............
 }
//ниже private:
struct stSAMP *g_SAMP = 0x0;
Так вот в логах часто пишется "tryInit(void)" и "g_SAMP == nullptr", значит это условие не выполняется. Как исправить это?
0
nmcf
6516 / 5745 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
18.04.2016, 16:05 13
dwSAMPAddr надо смотреть, наверное.
0
Vasiliyy
3 / 2 / 6
Регистрация: 13.11.2015
Сообщений: 190
18.04.2016, 17:27  [ТС] 14
nmcf,
C++
1
2
3
//ниже private:
struct stSAMP *g_SAMP = 0x0;
DWORD dwSAMPAddr = 0x0;
вот так, не дописал dwSAMPAddr просто.
0
18.04.2016, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2016, 17:27

Шаблоны и error C2664
Всем доброго времени суток!!! В общем, есть класс template &lt;class Info&gt;...

Error C2664 в cin.getline()
Всем привет.Пишу телефонную книгу в консоли ,при попытке заполнить поля...

error C2664: невозможно преобразовать параметр
Здравствуйте. Отправьте меня если что в другую тему, где это обсуждалось, но я...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru