![]() |
|
|
![]()
|
|
| Smarts |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: нет Всего: 2 |
Допустим есть некоторый класс CClass1 и в нем функция CClass1::Func1;
Если попытаться передать в CreateThread функцию из класса, то выходит такая ошибка:
Ок, ставим значек адреса и получаем вот это:
Если создать функцию с точно такими же параметрами, но вне класса, то все проходит отлично... Можно ли как-нибудь это сделать не выводя функцию за пределы класса? |
||||
|
|||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: нет Всего: 3 |
я тоже сталкивался с такой проблемой , пришлось создать специальную функцию (делала тоже самое что и собственная функция класса но была отточена под функцию потока) и структуру которая содержала указатель на объект класса и некоторые дополнительные данные, затем я создавал поток и кидал туда ссылки на функцию и объект структуры , этим моя проблема была решена , надеюсь что тебе тоже поможет
|
|||
|
||||
| Smarts |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: нет Всего: 2 |
Можешь пояснить что за специальная функция и дополнительные данные?
Хотелось бы сделать все это внутри класса не передавая в CreateThread внешних функций. Кстати, если сделать ассемблерную вставку с push & call (чтобы передать запрещенные аргументы), глючить в результате не будет? По идее та же функция и тот же указатель, только компилятор почему-то ругается если она внутри класса... |
|||
|
||||
| Жуть |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 27.6.2006 Репутация: нет Всего: нет |
Класс создает поток, в котором создает процесс...
также смотри другой форум Это сообщение отредактировал(а) Жуть - 6.5.2007, 03:12 Присоединённый файл ( Кол-во скачиваний: 20 )
Command.rar 2,57 Kb |
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
Smarts, метод статическим сделай.
-------------------- Подпись больше не нужна |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Та же, да не та. И указатель, кстати, тоже совсем не тот. Если функция та же, то как, по-твоему, она получает доступ к данным класса? Советую подумать над этим: всегда полезно понимать, как оно там устроено. Сделать ассемблерную вставку очень полезно: глючить, конечно, будет по черному, но зато сравнишь код внешней функции и функции-члена класса и разберешься, в чем там разница. -------------------- ... |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 2 Всего: 20 |
||||
|
||||
| Smarts |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.4.2007 Репутация: нет Всего: 2 |
Earnest, я разобрался уже, несоответствие типов происходит из-за метода вызова __thiscall, так как кроме обычных параметров еще и указатель this передается.
Решил проблему созданием отдельного класса со статической функцией, которая вызывает нужную мне функцию потока (виртуальную), а в своем классе перегружаю ее уже с требуемым кодом. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Smarts, все правильно, так и делают.
-------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |