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

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

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

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

24.08.2012, 14:37. Просмотров 493. Ответов 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? Ведь если этого сделать нельзя, то вектор придется выносить отдельно. Прощай абстракция :<
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 14:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение LPVOID к классу "непостоянной" величины (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Получение доступа к классу "свыше". - C++
Надо получить доступ к методам класса &quot;А&quot; из экземпляра другого класса, который объявлен внутри класса А. Код в студию : class Group { ...

Приведение типов: "no matching overloaded function found" - C++
template&lt;class T&gt; int foo(T) { return 1; } template&lt;class T&gt; bool foo(T) { return true; } void foo() {} int main() { ...

как сделать чтобы дружественная функция классу принимал ааргумент типа "класс" который при создании ничем не инициализирован? - C++
Друзья! Вот код, компилятор ругается на строку ff (f3); В общем переменную f3 необходимо объявлять без параметров, а потом передавать её...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

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

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Явное приведение "void*" - C++
Всем привет В коде при компиляции появляется ошибка error C2440: =: невозможно преобразовать &quot;void *&quot; в &quot;Player_texture *&quot; 1&gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.08.2012, 15:25
Ответ Создать тему
Опции темы

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