Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: cоnvert paramеter - ошибка компиляции  (Прочитано 12614 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tomson
Участник

ru
Offline Offline

« : 21-03-2008 12:47 » 

Подскажите с функцией...
Код:
g_dispatcher = lib_CreateThread(NULL, 0, dispatcher, (LPVOID)config, 0, &thread_id);
//'_beginthreadex' : cannot convert parameter 3 from 'DWORD (__stdcall *)(LPVOID)' to 'unsigned int (__stdcall *)(void *)'
А если сделать вот так...
Код:
g_dispatcher = lib_CreateThread(NULL, 0, (LPVOID)dispatcher, (LPVOID)config, 0, &thread_id);
//'_beginthreadex' : cannot convert parameter 3 from 'LPVOID' to 'unsigned int (__stdcall *)(void *)'
Как побороть?
« Последнее редактирование: 09-04-2008 20:16 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 21-03-2008 12:54 » 

а там написано как Улыбаюсь
обе функции должны быть типа 'unsigned int (__stdcall *)(void *)'

например

static unsigned int __stdcall F (void *);
Записан

Tomson
Участник

ru
Offline Offline

« Ответ #2 : 21-03-2008 13:44 » 

хм у меня вот так
static void      get_traffic_stats(unsigned __int64 *stats);
а тут так...
DWORD __declspec(dllimport) __stdcall GetIfEntry(PMIB_IFROW);
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 21-03-2008 14:55 » 

Tomson, ну дык... Делай выводы )  Измени параметры как нужно. А внутрь функции передай

(void*)&MyStructVar

где

struct s_MyStruct
{
  тип* указатель_1;
  тип* указатель_2;
  тип* указатель_3;
};

s_MyStruct MyStructVar;

понятна мысль ?
Записан

Tomson
Участник

ru
Offline Offline

« Ответ #4 : 22-03-2008 03:25 » 

Понятна и не понятна, похоже мне придется столько всего переделывать или нет?
Можешь покаать на моих значениях?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 22-03-2008 05:21 » 

Tomson, переделывать маленько

ну, например
Код:
class XXX
{
 static DWORD dispatcher(void* pv);
 DWORD config(void* pv);
};

DWORD XXX::config(void* pv)
{
}

//-------------------------------------
//запуск потока
void XXX::RunTr()
{
   g_dispatcher = lib_CreateThread(NULL, 0, dispatcher, (void*)this, 0, &thread_id);
}

//---------------------------------------
//поток
DWORD XXX::dispatcher(void* pv)
{
   XXX* pThis=( XXX*)pv;

  //далее юзать pThis как аналог this для доступа к членам класса

  pThis->config(...);

}
« Последнее редактирование: 22-03-2008 05:24 от Алексей1153++ » Записан

Tomson
Участник

ru
Offline Offline

« Ответ #6 : 22-03-2008 08:54 » 

попытка не пытка, попробовал, но ошибок стало только больше, например такие...
 'RunTr' : is not a member of 'XXX'
 'RunTr' : local function definitions are illegal
'XXX::dispatcher' : local function definitions are illegal
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 22-03-2008 09:53 » 

Tomson,

Код:
class XXX
{
 static DWORD dispatcher(void* pv);
 DWORD config(void* pv);
 void RunTr();
};

DWORD XXX::config(void* pv)
{
return 0;
}

//-------------------------------------
//запуск потока
void XXX::RunTr()
{
   g_dispatcher = lib_CreateThread(NULL, 0, dispatcher, (void*)this, 0, &thread_id);
}

//---------------------------------------
//поток
DWORD XXX::dispatcher(void* pv)
{
   XXX* pThis=( XXX*)pv;

  //далее юзать pThis как аналог this для доступа к членам класса

  pThis->config(...);

  return 0;
}
Записан

Tomson
Участник

ru
Offline Offline

« Ответ #8 : 22-03-2008 11:19 » 

Код:
class XXX
{
 static DWORD dispatcher(void* pv);
 DWORD config(void* pv);
 void RunTr();
};

DWORD XXX::config(void* pv)
{
}

int
start(const char *config)
{
int result = FALSE;
WSADATA wsd;
DWORD thread_id;

WSAStartup(MAKEWORD(1, 1), &wsd);

// try to dynamically link psapi.dll
link_psapi();

/* connect with driver */

g_device = CreateFile(g_device_name, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (g_device == INVALID_HANDLE_VALUE) {
winerr(g_device_name);
goto done;
}

/* open event for driver communication */

g_event = OpenEvent(SYNCHRONIZE, FALSE, "tdifw_request");
if (g_event == NULL) {
winerr("start: OpenEvent");
goto done;
}

/* load config & rules */

if (!load_config(config))
goto done;

/* start dispatcher thread */

g_exit_event = CreateEvent(NULL, TRUE, FALSE, NULL);
if (g_exit_event == NULL) {
winerr("start: CreateEvent");
goto done;
}

g_disp_buf = (char *)malloc(DISP_BUF_SIZE);
if (g_disp_buf == NULL) {
liberr("start: malloc");
goto done;
}

log_msg("START", MSGTYPE_ALLOW);

// не знаю правильно ли это...
void XXX::RunTr()
{
   g_dispatcher = lib_CreateThread(NULL, 0, dispatcher, (void*)this, 0, &thread_id);
}

DWORD XXX::dispatcher(void* pv)
{
   XXX* pThis=( XXX*)pv;

 pThis->config(...);

}
// g_dispatcher = lib_CreateThread(NULL, 0, (/*LPTHREAD_START_ROUTINE*/LPVOID)dispatcher, (LPVOID)config, 0, &thread_id);
if (g_dispatcher == NULL) {
winerr("start: lib_CreateThread");
goto done;
}

result = TRUE;

done:
if (!result)
stop();

return result;
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 22-03-2008 12:00 » 

Tomson, я не могу понять, что ты хочешь добиться , расскажи про цель

Цитата
// не знаю правильно ли это...
- это точно не правильно ) 

вот это
Код:
// не знаю правильно ли это...
void XXX::RunTr()
{
}

DWORD XXX::dispatcher(void* pv)
{
}

поставь перед процедурой start, это же реализация класса XXX.

Кстати, вот тут надо так :
Код:
class XXX
{
public:
 static DWORD dispatcher(void* pv);
 DWORD config(void* pv);
 void RunTr();
};


ну и... срочно читать С++ для начинающих , осваивать синтаксис Улыбаюсь
« Последнее редактирование: 22-03-2008 12:02 от Алексей1153++ » Записан

Tomson
Участник

ru
Offline Offline

« Ответ #10 : 22-03-2008 13:54 » 

ок, а если мну нужно указать дважды...

void XXX::RunTr()
{
   g_dispatcher = lib_CreateThread(NULL, 0, dispatcher, (void*)this, 0, &thread_id);
}

void XXX::RunTr()
{
      lib_CreateThread(NULL, 0, restart_thread, (void*)this, 0, &thread_id);
      
}
мне скажет
function 'void XXX::RunTr(void)' already has a body

А если я указываю функцию в
DWORD WINAPI
dispatcher(LPVOID param)
{
void XXX::RunTr()
{
      lib_CreateThread(NULL, 0, restart_thread, (void*)this, 0, &thread_id);
      
}
..etc
}
то получаю..
'XXX::RunTr' : local function definitions are illegal

Вообще в начале я хотел исправить пару ошибок) Т.к. ошибки одинаковые, то я в начале написал про одну....
На сколько я понял тут создается поток что-бы передать обновленный конфиг драйверу.
В общем я пытаюсь собрать управляющую часть вот этого... http://sourceforge.net/projects/tdifw
« Последнее редактирование: 22-03-2008 14:07 от Tomson » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #11 : 22-03-2008 14:11 » 

Код:
void XXX::RunTr()
{
   g_dispatcher = lib_CreateThread(NULL, 0, dispatcher, (void*)this, 0, &thread_id);
}

void XXX::RunTr()
{
      lib_CreateThread(NULL, 0, restart_thread, (void*)this, 0, &thread_id);
     
}
Ты не можеш определить в одной зоне видимости 2 функции с одним и тем же именем и набором параметров.

Код:
DWORD WINAPI
dispatcher(LPVOID param)
{
void XXX::RunTr()
{
      lib_CreateThread(NULL, 0, restart_thread, (void*)this, 0, &thread_id);
     
}
..etc
}
Функция в функции запрешено определять в С/С++.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines