![]() |
|
![]() ![]() ![]() |
|
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
Здравствуйте! вопрос двоешника:
[BCC32 Error] script.hpp(245): E2231 Member SCRIPT::Message cannot be used without an object Возникает когда в статической функции класса, пытаюсь вызвать элементы этого самого класса.
Само собой код примерный, не думаю что будет вам удобно просматривать огрооооомный листинг того что там есть.... в общем набросал саму суть. На названия и прочее не обращайте внимание могут быть ошибки и не совпадения (лень проверять). Заранее благодарю за ответы и помощ ![]() ![]() Это сообщение отредактировал(а) NYX - 19.4.2010, 18:46 --------------------
'long long long' is too long for GC |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 5 Всего: 23 |
||||
|
||||
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
Да это оно понятно
![]() ![]() ![]() Это сообщение отредактировал(а) NYX - 19.4.2010, 18:45 --------------------
'long long long' is too long for GC |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 5 Всего: 23 |
NYX, просто создать еще один аргумент - ссылку на объект данного класса.
|
|||
|
||||
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
А передача аргументов в поток? При попытке отправить в DWORD инициатора потока ДЕСКРИПТОР на объект, опять же возникает ошибка, что мол невозможно привести CLASS_OBJECT к unsigned long :(
--------------------
'long long long' is too long for GC |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 5 Всего: 23 |
||||
|
||||
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
WIN APIшный Createthread где в виде аргументов используется указатель на функцию потока и указатель на DWORD аргумент. Это единственное что я могу передать в функцию потока :(
--------------------
'long long long' is too long for GC |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 5 Всего: 23 |
NYX, к DWORD можно привести любой указатель с помощью обычной операции приведения типа.
Можно текущий объект класса (DWORD)(this). |
|||
|
||||
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
[BCC32 Error] script.hpp(329): E2031 Cannot cast from 'SCRIPT' to 'unsigned long'
и тут же [BCC32 Error] script.hpp(332): E2034 Cannot convert 'unsigned long (__stdcall *)(SCRIPT *)' to 'unsigned long (__stdcall *)(void *)' Это сообщение отредактировал(а) NYX - 19.4.2010, 19:10 --------------------
'long long long' is too long for GC |
|||
|
||||
ИванМ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 5 Всего: 23 |
Я говорил про указатель, а не объект.
Код покажите, что вы там передаете. |
||||
|
|||||
NYX |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
Вот так работает
Вот так не хочет работать... пишет что невозможно привести unsigned long к void ![]() [BCC32 Error] File1.cpp(24): E2034 Cannot convert 'unsigned long (__stdcall *)(unsigned long &)' to 'unsigned long (__stdcall *)(void *)' и [BCC32 Error] File1.cpp(24): E2342 Type mismatch in parameter 'lpStartAddress' (wanted 'unsigned long (__stdcall *)(void *)', got 'unsigned long (__stdcall *)(unsigned long &)')
P.S. - код уже раз 50 в этом месте менялся, счас делаю в отдельном проекте, что бы не листать на пол экрана.... тут в функция вне класса, но смысл думаю не меняется... --------------------
'long long long' is too long for GC |
||||
|
|||||
NYX |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
LPVOID
Указатель на любой тип. Этот тип объявлен в Windef.h как показано ниже: typedef void *LPVOID; Один фиг не вкурю :( Никогда не пользовался такими указателями :( Ну передал я указатель на объект... а далее... как его к чеему приводить что бы можно было обращаться... блин голова опухла и уже не соображаю. Хрень какая то :( Вот так блин работает!
А вот так блин не работает :( Компилятор не ругается, запускат все гуд! Но результат 0!
Это сообщение отредактировал(а) NYX - 20.4.2010, 12:14 --------------------
'long long long' is too long for GC |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Все должно работать. Поставь Sleep(1000) после CreateThread
|
|||
|
||||
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
ставил задержки :(
В общем пришлось сделать глобальный массив указателей, куда конструктор класса пихает указатель на себя. В случае вызова функции потока, потоку передается номер экземпляра класса \ объекта, по которому из массива извлекаю указатель, который и используется в дальнейшем в функции. Хотя эт конечно для моего случая не обязательно, ибо функция потока один фиг запускается не более чем в одном экземпляре... так что необходимости в привязке к классу нет ![]() ![]() Вот с передачей копии объекта или копии аргумента, проблем нет, а вот сам объект по ссылке не передается :( чуть позже начирикаю БРЕДНИ которые стали решением ))) ** ))) Тупая моя голова, я разрушаю класс прежде чем закрываю поток!!! В этом и вся беда!!!!!!! стало быть разрушается класс, методом которого является статическая функция потока, следовательно ... ... ...
В общем как то так.... Думаю больше 50 объектов просто не к чему будет ![]() Да и после удаления класса наобходимо отматать счетчик экземпляров на 1. ... Отнюдь! стала вылетать пристраннейшая ошибка приошибка! Каким то левым боком, ругается на оконную процедуру и ссылается на classes.h честн сказать вобще черт ногу сломит что там происходит. но вышеперечисленный код работает только на консоли. В окошечном приложении данное подобие кода провацирует кучу каких то невероятных ошибок. Поведение программы такое: Запускаю прогу, пинаю кнопочку РАБОТАЕТ! Все норм, все данные те что надо легко меняются и легко читаются... но как только стоит мне провести мышой по заголовку окна, ВСЕ нафиг слетает компилятор останавливается на цикле внутри потока O_O с чем это связано я представить себе даже не могу!!! К сведению - компилятор Embarcadero Code Gear RAD STUDIO триалка 2009 ... По последнему видать что то в компиляторе, так как на 6 BCB все работает превосходно. Тема закрыта ![]() Это сообщение отредактировал(а) NYX - 20.4.2010, 18:42 --------------------
'long long long' is too long for GC |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
У вас написан знатный бред. Вполне может и не работать. Обычная передача this в качестве параметра процедуре thread'а всегда работала на ура. Кстати, чем вас TThread не устроил? И еще кстати - вы в курсе, что выполнение thread'ов надо синхронизировать?
Добавлено через 1 минуту и 58 секунд Не верю! (с) Станиславский. Код с задержками в студию |
|||
|
||||
NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
Дурная голова рукам покоя не дает
![]() ![]()
Работает замечательно! Вот перечень проблем которые попались на пути: Изначально, тупил с DWORD и только потом удосужился удостовериться в типе передаваемых аргументов, оказался LPVOID - всем указателям указатель. Далее перенеся проект на консоль, долго мучился со слетами, ибо читалась какая то несуществующая область памяти - причина в преждевременном удалении класса ![]() Далее ... удалось таки забабацать передачу индекса в виде аргумента (просто поток он как бы нужен в одном экземпляре, мне не нужен поток на класс). Опять же какая то дрибедень случалась, ибо в момент завершения потока, вновь создаваемый поток иногда вызывал ошибки. Затем чуть чуть подправив код в основной форме (снова на исходном проекте) начал запускать прогу но блин какие то слеты какая то ересь со стороны программы. Трассировщиком отлавливал слеты, отслеживал переменные но все было ГУД! (в поток передавал номер индекса из массива указателей). ПОТОМ!! Как выяснилось, что Code Gear как то странно работает с проектом, а точнее, ребилду при старте подлежать лишь ОСНОВНЫЕ модули проекта (типо Unit.cpp и Unit.h), и как повидимому, для какого то ускорения старта и компиляции, подключаемые (иклуденные) файлики, он почему то не ребилдит, только если явно не запросил этого. Вот такое приключение, счас все замечательно работает, приношу величайшие извинения за хламоту и мусороразведение!!! Вообще по началу тему создал от злости на происходящее и расщитывал на свои способности ![]() ![]() ![]() --------------------
'long long long' is too long for GC |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |