Страница 2 из 2
Добавлено: 14 Июнь 2006, 8:24
Andrew™
iBAH писал(а):iBAH писал(а):Andrew Myalin писал(а):если мне надо какая то глобальная ссылка, я её декларирую в .CLW реализации типового класса, в конструкторе которого делаю присвоение:
Код: Выделить всё
GloRef &myClass
myClass.Constructor
CODE
GloRef &= SELF
в APP я декларирую такую переменную как
всё, работа с GloRef идёт на ура
Спасибо за ответ... все действительно идет на ура

Такая схема не работает в Clarion5... когда делаю в app MyRef &= new(MyClass) программа слетает

что делать? clw-ху к проекту подключил... та же фигня
да, блин, ну зачем же так утверждать, у меня коммерческие продукты для C5, C55, C6.x, и во всех юзается одна схема глобальных указателей, и всё работает на ура, проблема в ручках
и вот такая конструкция мне очень нравится
Код: Выделить всё
myClass.Kill PROCEDURE
tmp &SELF
CODE
tmp &= SELF
DISPOSE(tmp)
Добавлено: 14 Июнь 2006, 9:13
Дед Пахом
А чем такая конструкция
Код: Выделить всё
myClass.Kill PROCEDURE
tmp &SELF
CODE
tmp &= SELF
DISPOSE(tmp)
лучше/правильнее
Добавлено: 14 Июнь 2006, 10:01
Andrew™
Дед Пахом писал(а):А чем такая конструкция
Код: Выделить всё
myClass.Kill PROCEDURE
tmp &SELF
CODE
tmp &= SELF
DISPOSE(tmp)
лучше/правильнее
а ты попробуй её реализовать, может быть в C6.x она и прокатит, не пробовал, но в ранних версиях Clarion компилер не пропускал такую конструкцию, а мне нужен универсальный код под все версии Clarion
Добавлено: 14 Июнь 2006, 10:35
Дед Пахом
Ясно. Про C6 точно могу сказать, что там работает.
Добавлено: 14 Июнь 2006, 19:35
iBAH
Andrew Myalin писал(а):...
да, блин, ну зачем же так утверждать, у меня коммерческие продукты для C5, C55, C6.x, и во всех юзается одна схема глобальных указателей, и всё работает на ура, проблема в ручках
и вот такая конструкция мне очень нравится
Код: Выделить всё
myClass.Kill PROCEDURE
tmp &SELF
CODE
tmp &= SELF
DISPOSE(tmp)
Извиняюсь... Просто не в этой схеме дело... Проблема Clarion5 оказалась в другом: Если в качестве свойства класса1 использовать ссылку на класс2, то при вызове Метода класса2 из метода класса1 программа вылетает... т.е.
Код: Выделить всё
MyClass1.SomeMethod1 PROCEDURE()
CODE
self.RefMyClass2&=new(MyClass2)
self.RefMyClass2.SomeMethod2 !здесь вылетает
классы описаны во внешнем модуле...
при этом, если вызывать тот же метод класса2 вне метода другого класса все ok
Код: Выделить всё
!вызов в app
RefMyClass1.RefMyClass2.SomeMethod2! а здесь все ok
А за схему еще раз спасибо: проверил на простом примере работает и в clarion5, а в C6 уже вовсю использую
Добавлено: 15 Июнь 2006, 8:03
Andrew™
iBAH писал(а):Andrew Myalin писал(а):...
да, блин, ну зачем же так утверждать, у меня коммерческие продукты для C5, C55, C6.x, и во всех юзается одна схема глобальных указателей, и всё работает на ура, проблема в ручках
и вот такая конструкция мне очень нравится
Код: Выделить всё
myClass.Kill PROCEDURE
tmp &SELF
CODE
tmp &= SELF
DISPOSE(tmp)
Извиняюсь... Просто не в этой схеме дело... Проблема Clarion5 оказалась в другом: Если в качестве свойства класса1 использовать ссылку на класс2, то при вызове Метода класса2 из метода класса1 программа вылетает... т.е.
Код: Выделить всё
MyClass1.SomeMethod1 PROCEDURE()
CODE
self.RefMyClass2&=new(MyClass2)
self.RefMyClass2.SomeMethod2 !здесь вылетает
классы описаны во внешнем модуле...
при этом, если вызывать тот же метод класса2 вне метода другого класса все ok
Код: Выделить всё
!вызов в app
RefMyClass1.RefMyClass2.SomeMethod2! а здесь все ok
А за схему еще раз спасибо: проверил на простом примере работает и в clarion5, а в C6 уже вовсю использую
ну тут без примера трудно что сказать, одно могу сказать - это ручки, давай пример, покажу где ошибаешься
Добавлено: 15 Июнь 2006, 17:05
iBAH
Andrew Myalin писал(а):
ну тут без примера трудно что сказать, одно могу сказать - это ручки, давай пример, покажу где ошибаешься
сюда выложил пример (usemyclass.zip) ...
http://slil.ru/22841410
запускал на Clarion5PE без патчей
Заранее спасибо
Добавлено: 16 Июнь 2006, 9:01
Andrew™
iBAH писал(а):Andrew Myalin писал(а):
ну тут без примера трудно что сказать, одно могу сказать - это ручки, давай пример, покажу где ошибаешься
сюда выложил пример (usemyclass.zip) ...
http://slil.ru/22841410
запускал на Clarion5PE без патчей
Заранее спасибо
ну как я и говорил, ошибка в ручках, почему в C5 вылетает, а в C6 нет, объясняю
есть волшебные EQUATE
Код: Выделить всё
_ABCDllMode_ EQUATE(0)
_ABCLinkMode_ EQUATE(1)
в C5 они декларируются в головносм .CLW проекта, в C6 в Project через Defines, в чём разница, в C5 эти EQUATE видны во всех модулях .CLW у которых MEMBER сылается на головной .CLW, в C6 - эти EQUATE видны во всех .CLW модулях, независимо от MEMBER
в твоём случае в xMyClass.clw, я после MEMBER вставил:
Код: Выделить всё
_ABCDllMode_ EQUATE(0)
_ABCLinkMode_ EQUATE(1)
и GPF пропал
кстати, при использовании этих волшебных EQUATE надо бы и реализацию ABC классов было поглядеть, и сделать по образу и подобию, там именно так и сделано
короче, удачи в написании своих классов

Добавлено: 16 Июнь 2006, 17:53
iBAH
Andrew Myalin писал(а):
ну как я и говорил, ошибка в ручках, почему в C5 вылетает, а в C6 нет, объясняю
есть волшебные EQUATE
Код: Выделить всё
_ABCDllMode_ EQUATE(0)
_ABCLinkMode_ EQUATE(1)
в C5 они декларируются в головносм .CLW проекта, в C6 в Project через Defines, в чём разница, в C5 эти EQUATE видны во всех модулях .CLW у которых MEMBER сылается на головной .CLW, в C6 - эти EQUATE видны во всех .CLW модулях, независимо от MEMBER
в твоём случае в xMyClass.clw, я после MEMBER вставил:
Код: Выделить всё
_ABCDllMode_ EQUATE(0)
_ABCLinkMode_ EQUATE(1)
и GPF пропал
гениально... вопрос исчерпан... спасибо
Andrew Myalin писал(а):
кстати, при использовании этих волшебных EQUATE надо бы и реализацию ABC классов было поглядеть, и сделать по образу и подобию, там именно так и сделано
чего то я торможу в последнее время... я ведь даже не догадался туда посмотреть

... чего сессия с людьми делает
Будем стараться

Добавлено: 30 Июнь 2006, 14:35
iBAH
Andrew Myalin писал(а):
есть волшебные EQUATE
Код: Выделить всё
_ABCDllMode_ EQUATE(0)
_ABCLinkMode_ EQUATE(1)
в C5 они декларируются в головносм .CLW проекта, в C6 в Project через Defines, в чём разница, в C5 эти EQUATE видны во всех модулях .CLW у которых MEMBER сылается на головной .CLW, в C6 - эти EQUATE видны во всех .CLW модулях, независимо от MEMBER
Опять поимел проблему... по не знанию...
В мульти dll пытаюсь проделать ту же операцию... gpf-а нет, но не знаю куда приляпать ссылки на класс... оставил их лежать в clw с классом, ее же сделал MEMBER('головной clw'). Когда пытаюсь пользоваться ссылками(EXTERNAL) в app... выдает Unresolved External. Волшебные EQUATES объявляю перед INCLUDE'ом в головном app и остальных, где использую класс...
Вот пример:
http://slil.ru/22886261
Добавлено: 30 Июнь 2006, 14:55
Andrew™
iBAH писал(а):
Опять поимел проблему... по не знанию...
В мульти dll пытаюсь проделать ту же операцию... gpf-а нет, но не знаю куда приляпать ссылки на класс... оставил их лежать в clw с классом, ее же сделал MEMBER('головной clw'). Когда пытаюсь пользоваться ссылками(EXTERNAL) в app... выдает Unresolved External. Волшебные EQUATES объявляю перед INCLUDE'ом в головном app и остальных, где использую класс...
Вот пример:
http://slil.ru/22886261
не хватет CSKEYS.CLW
чтобы любые объекты были видны в других DLL необходимо их проэкспортировать в той APP, где они не EXTERNAL, для этого в Global есть соответвующий Embed - Inside to export list туды втавь
Добавлено: 30 Июнь 2006, 16:20
iBAH
Andrew Myalin писал(а):
не хватет CSKEYS.CLW
чтобы любые объекты были видны в других DLL необходимо их проэкспортировать в той APP, где они не EXTERNAL, для этого в Global есть соответвующий Embed - Inside to export list туды втавь
Спасибо за помощь... разобрался... все работает
А что такое CSKEYS.CLW?
Добавлено: 03 Июль 2006, 8:12
Andrew™
iBAH писал(а):
А что такое CSKEYS.CLW?
а это тебя надо спросить, какой то шаблон юзаешь дополнительный или..., у меня в поставке C6.x такого файлика нету
