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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Приведение LPVOID к классу "непостоянной" величины - C++

24.08.2012, 14:37. Просмотров 476. Ответов 5
Метки нет (Все метки)

В поток посылаю экземпляр класс :
C++
1
userThread = CreateThread(NULL, NULL, ConnectionShell, (LPVOID)(&userCurrent), NULL, NULL);
Где пытаюсь излвечь экземпляр :
C++
1
2
3
4
5
6
7
8
DWORD CALLBACK ConnectionShell(LPVOID lParam)
{
    USER* userCurrent = new USER;
    memcpy(userCurrent, lParam, 44); // 44 - размер экземпляра после вызова стандартного\ конструктора
    userCurrent->Connection(); // Здесь так же побывали (USER*)(lParam)->Connection(); и их братья\
reinterpret/static/dynamic_cast
    return FALSE;
}
Сам класс "непостоянной" величины, ибо в нём есть vector :
C++
1
2
3
4
5
6
7
8
class USER
{
private :
    sockaddr_in _taddress;
    SOCKET _tsocket;
    std::vector <BOOL> _trooms;
...
};
Вопрос : как привести ОБРАТНО к типу USER тип LPVOID? Ведь если этого сделать нельзя, то вектор придется выносить отдельно. Прощай абстракция :<
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 14:37     Приведение LPVOID к классу "непостоянной" величины
Посмотрите здесь:

C++ Явное приведение "void*"
Замените в слове "му" на "а", а букву "ы" на "ца". C++
как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? C++
C++ Получение доступа к классу "свыше".
C++ Заменитье буквы "a" и "o" в слове на "A" и "O".
C++ Замените буквы "а" и "о" в слове на "А" и "О".
C++ Как сделать "Старт", "Пауза", Стоп"?
C++ Приведение типа к другому классу
C++ Конструкторы, приведение типа и ошибка "Не найден оператор, принимающий правый операнд типа 'char *'"
C++ Типы классу. Приведение. С++
C++ Переменные "емкость", "Галлон", "Бензин"
Приведение типов: "no matching overloaded function found" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
24.08.2012, 14:38     Приведение LPVOID к классу "непостоянной" величины #2
C++
1
2
3
4
5
6
DWORD CALLBACK ConnectionShell(LPVOID lParam)
{
    USER* userCurrent = reinterpret_cast<USER*>(lParam);
    userCurrent->Connection();
    return FALSE;
}
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
24.08.2012, 14:54  [ТС]     Приведение LPVOID к классу "непостоянной" величины #3
Andsteadur, зря комментарии к коду не прочитали. Я писал, что пробовал это.
Так же пробовал virtual void Connection();
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
24.08.2012, 15:11     Приведение LPVOID к классу "непостоянной" величины #4
Не знаю, не знаю... У меня в поток все данные корректно передаются в MSVS 2008.
Вот eще пример, правда здесь без потока: http://liveworkspace.org/code/71ba1e...316d7bb08a9c09
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
24.08.2012, 15:19  [ТС]     Приведение LPVOID к классу "непостоянной" величины #5
Вопрос решен.
Проблема была в потоке. Пока выполнялся поток, куда посылался объект класса USER, функция, где был создан поток и этот объект, благополучно выпиливались и завершались, вот и уничтожался объект типа USER, передаваемый в поток через LPVOID.
Проблему можно решить введением глобальной или static переменной в функцию.
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
24.08.2012, 15:25     Приведение LPVOID к классу "непостоянной" величины #6
Либо динамически создавать объект, а удалять его перед завершением потока, если он больше не нужен:
C++
1
2
USER *userCurrent = new USER(...);
userThread = CreateThread(NULL, NULL, ConnectionShell, reinterpret_cast<LPVOID>(userCurrent), NULL, NULL);
Yandex
Объявления
24.08.2012, 15:25     Приведение LPVOID к классу "непостоянной" величины
Ответ Создать тему
Опции темы

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