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

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

Войти
Регистрация
Восстановить пароль
 
 
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
#1

Передача других типов переменных через тип LPVOID - C++

07.10.2015, 23:00. Просмотров 664. Ответов 32
Метки нет (Все метки)

Добрый вечер.
В функцию нужно передать переменную типа
C++
1
Awesomium::WebView*
А функция принимает тип
C++
1
LPVOID
Передаю так:
C++
1
2
3
Awesomium::WebView* caller;
LPVOID pDataArray[1];
pDataArray[1] = (Awesomium::WebView*)caller;
Пытаюсь принять так:
C++
1
2
LPVOID pDataArray;
Awesomium::WebView* caller = (Awesomium::WebView*)pDataArray[1];
но делаю не то.

Подскажите, как надо?

Добавлено через 1 час 23 минуты
Теперь передаю так:
C++
1
2
3
Awesomium::WebView* caller;
LPVOID pDataArray[1];
pDataArray[1] = caller;
Принимаю так:
C++
1
2
3
LPVOID pDataArray
Awesomium::WebView* caller;
caller = (Awesomium::WebView*)pDataArray;
Компилируется без ошибок.

Но когда используется переменная caller, то выдает ошибку.

Что не правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2015, 23:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача других типов переменных через тип LPVOID (C++):

В чем особенность функции типа void от других типов? - C++
В чем особенность функции типа void от других типов?

Преобразование типов переменных - C++
Осуществить преобразование типов переменных явным и неявным способом по следующим схемам: float → short int short int → int char →...

Ввод и вывод типов переменных - C++
Ребята, помогите пожалуйста! У меня практика, а c++ builder вообще не изучали(((( Вообщем, задание такое: Организовать ввод и вывод данных...

Сравнение переменных разных типов - C++
Здравствуйте. Столкнулся с проблемой не совпадения типов данных. Есть переменная string str, которая, к примеру, имеет значение "1245"....

Объявление переменных различных типов - C++
Совсем не понимаю задачу Помогите пожалуйста!! ...

Цвет собственных типов переменных в C++ - C++
Здрасте! Что необходимо сделать, чтобы собственные типы переменных в окне "Код" отображался синим цветом, а не чёрным? Вот, к примеру,...

32
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,155
07.10.2015, 23:07 #2
В массиве 1 элемент, значит максимальный индекс 0, у тебя 1. И зачем вообще массив здесь?
1
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
07.10.2015, 23:31  [ТС] #3
nmcf, потому что иначе не получается передать

Добавлено через 44 секунды
nmcf, сделал так:
C++
1
2
3
Awesomium::WebView* caller;
LPVOID pDataArray[1];
pDataArray[0] = caller;
А ошибка та же

Добавлено через 40 секунд
В функцию передается это:
C++
1
pDataArray[0]
А функция принимает просто как переменную, не массив

Добавлено через 6 минут
Теперь так сделал.

Передача:
C++
1
2
3
Awesomium::WebView* caller,
Awesomium::WebView* pDataArray[1];
pDataArray[0] = caller;
Прием:
C++
1
2
3
LPVOID lpParam
Awesomium::WebView* caller;
caller = (Awesomium::WebView*)lpParam;
Уже лучше. А ошибка та же.

Добавлено через 14 минут
Да. Можно без массива.

Передача:
C++
1
2
3
Awesomium::WebView* caller;
Awesomium::WebView* pDataArray;
pDataArray = (Awesomium::WebView*)caller;
Но в преобразовании:
C++
1
caller = (Awesomium::WebView*)lpParam;
теряется указатель. И переменная caller получается пустая.
0
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,155
07.10.2015, 23:52 #4
Не может он теряться. Что такое Awesomium::WebView*? Это указатель на что?
Покажи как выглядит этот WebView и как объявлена принимающая функция.
1
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
07.10.2015, 23:55  [ТС] #5
nmcf, Принимающая функция:
C++
1
DWORD WINAPI MyThreadFunction(LPVOID lpParam) {
WebView:
C++
1
2
3
4
virtual WebView* CreateWebView(int width,
                                 int height,
                                 WebSession* session = 0,
                                 WebViewType type = kWebViewType_Offscreen) = 0;
0
nmcf
6207 / 5518 / 1932
Регистрация: 14.04.2014
Сообщений: 23,155
07.10.2015, 23:59 #6
Это функция-член класса? Ты же её не сможешь вызвать саму по себе, без объекта.
1
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
08.10.2015, 00:13  [ТС] #7
nmcf, вызываю саму по себе таким образом:
C++
1
2
3
4
5
6
7
HANDLE hThreadArray = CreateThread(
                NULL,                   // default security attributes
                0,                      // use default stack size  
                MyThreadFunction,       // thread function name
                caller,          // argument to thread function 
                0,                      // use default creation flags 
                &dwThreadIdArray);
Добавлено через 9 минут
В функцию MyThreadFunction значение приходит, типа LPVOID.
Преобразуя LPVOID в WebView* значение становится 0
0
ValeryS
Модератор
7020 / 5358 / 531
Регистрация: 14.02.2011
Сообщений: 18,082
08.10.2015, 00:27 #8
Цитата Сообщение от Randen Посмотреть сообщение
caller, * * * * *// argument to thread function
кто такой caller? как обьявлен?
0
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
08.10.2015, 00:31  [ТС] #9
ValeryS,
C++
1
Awesomium::WebView* caller
0
ValeryS
Модератор
7020 / 5358 / 531
Регистрация: 14.02.2011
Сообщений: 18,082
08.10.2015, 00:36 #10
lpParameter
[in] Указатель на переменную, которая передается в поток.
отсюда http://webcache.googleusercontent.co...gbv=2&&ct=clnk
я объявленных переменных не видел, только указатели

Добавлено через 3 минуты
Цитата Сообщение от Randen Посмотреть сообщение
Awesomium::WebView* caller
так это указатель ( и то с натяжкой)а тебе нужна переменная
типа
C++
1
2
3
4
5
6
7
8
 Awesomium::WebView caller;
HANDLE hThreadArray = CreateThread(
                NULL,                   // default security attributes
                0,                      // use default stack size  
                MyThreadFunction,       // thread function name
                &caller,          // argument to thread function 
                0,                      // use default creation flags 
                &dwThreadIdArray);
но это не проканает потому что
C++
1
Awesomium::WebView caller;
нельзя так создать переменную
странный тип Awesomium::WebView
1
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
08.10.2015, 00:37  [ТС] #11
Через глобальную переменную выяснил что не в переменной дело.

Но почему в асинхронном потоке не выполняется то, что выполняется в главном?
0
ValeryS
Модератор
7020 / 5358 / 531
Регистрация: 14.02.2011
Сообщений: 18,082
08.10.2015, 00:42 #12
Цитата Сообщение от Randen Посмотреть сообщение
Через глобальную переменную выяснил что не в переменной дело.
ты много еще можешь выяснить
зайди на сайт http://www.firststeps.ru/
и посмотри как создаются потоки
тебе нужен указатель на конкретную выделенную память(переменная, структура, класс), для того нужно или взять адрес, или выделить память при помощи new, а не указатель который указывает в космос
0
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
08.10.2015, 00:59  [ТС] #13
ValeryS, если вы знаете как это сделать, то поделитесь, пожалуйста, нужной инфой. Потому что там кроме того что сайт ужасный и не удобный. Дак еще и куча лишней инфы, среди которой без поиска можно жизнь провести

Добавлено через 6 минут
ValeryS, либо я вас не понял, либо вы меня.
Вот объявляется указатель:
C++
1
WebView* web_view;
Вот присваивается ему адрес:
C++
1
web_view = view_->web_view();
Далее я могу с ним работать как и должно быть. Но в асинхронном потоке работать с ним не получается!
Почему?
На сайте одна страница про потоки:
http://www.firststeps.ru/mfc/steps/r.php?128
Ответа там нет.

Добавлено через 2 минуты
Еще уточню, что в асинхронном потоке работает всё, кроме работы с этим указателем WebView*
0
ValeryS
Модератор
7020 / 5358 / 531
Регистрация: 14.02.2011
Сообщений: 18,082
08.10.2015, 01:06 #14
Цитата Сообщение от Randen Посмотреть сообщение
Дак еще и куча лишней инфы,
лишней инфы не бывает там хорошо описаны потроха винды
Цитата Сообщение от Randen Посмотреть сообщение
если вы знаете как это сделать,
я же показал
ну вот еще раз
C++
1
2
3
4
5
6
7
8
int parametr;
HANDLE hThreadArray = CreateThread(
                NULL,                   //  дескриптор защиты
                0,                      // Начальный размер стека, в байтах, по умолчанию 
                MyThreadFunction,       // функция отока
                &parametr,          //  Указатель на переменную, которая передается в поток.
                0,                      // Флажки, которые управляют созданием потока. Поток создается сразу
                NULL);//Указатель на переменную, которая принимает идентификатор потока. нет такой
ну можешь еще здесь посмотреть, вроде толково расписано
http://eax.me/winapi-threads/

Добавлено через 1 минуту
Цитата Сообщение от Randen Посмотреть сообщение
Далее я могу с ним работать как и должно быть. Но в асинхронном потоке работать с ним не получается!
этот указатель глобальный?
1
Randen
34 / 34 / 8
Регистрация: 06.01.2014
Сообщений: 707
08.10.2015, 01:08  [ТС] #15
ValeryS, сделал его глобальным, дабы проверить. И ошибка не в передаче переменной потоку, а в самом потоке или что там я уже не знаю)
0
08.10.2015, 01:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2015, 01:08
Привет! Вот еще темы с ответами:

Ввод значений переменных различных типов - C++
Всем доброго вечера. возникла проблемка с одним задание: Ввод значений переменных различных типов(строковый, целый без запятой, целый с...

Как записать в переменную значения других переменных? - C++
Как мне сделать так, чтобы в 3 строке были их значения? String login = Edit1->Text; String pass = Edit2->Text; AnsiString asPostData...

Преобразования типов. Определить тип переменной - C++
Всем привет Недавно начал изучать язык C++ по книжке "Объектно-ориентированное программирование в C++" и там есть тема (Преобразование...

Все виды(способы) объявления переменных, функций, классов, типов и т.п. на С++ - C++
Пишу обфускатор кода, написанного на С++ и появилась необходимость знания всевозможных способов объявления чего-либо на С++. Так как...


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

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

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