Алексей Новиков пишет:
Вообще говоря, есть. Достаточно глянуть в hbclass.ch, чтобы убедиться в этом.
Ну как же нет? Когда создаётся массив или экземпляр объекта, переменной присваивается именно указатель.
В hbclass.ch миллион препроцессорных команд, как я понимаю!!! При беглом взгляде Create - это похоже и есть конструктор, а что там внутри него....
Цитата
Алексей Новиков пишет:
Ну как же нет? Когда создаётся массив или экземпляр объекта, переменной присваивается именно указатель.
Ну, да, я так и написал - подобие указателя!!! Какие операции интересно с этим указателем можно сделать? А самому объявить указатель? Выделить память?!!!
Как раз функции для работы с массивами это и делают (AAD(), AREMOVE() и пр.). Как я понимаю для нас простых смертных это не указатель, а что-то вроде метки (или имени указателя), а сами операции с указателями (и они сами) получаются скрытыми....
Саак Шахламджян пишет:
Единственное что мне пришло в голову по этому поводу это сделать массив обектов, а затем этот массив (ну или элемент массива) обнулить
Деструктор при этом не вызывается. Ведь экземпляр объекта не уничтожается.
А GarbageCollector, видимо, запускается только при выходе из плагина. Находит потерянный экземпляр и прибивает его.
А есть вообще такие понятия как конструктор и деструктор!!?
Я что-то такого не встречал в описании работы с классами!!!
К стати, такого понятия как указатель так же нет. Хотя для работы с классами какое-то подобие указателя есть... Нет функций по работе с памятью!!! Отсюда и нет конструкторов и деструкторов, как я понимаю. Среда выполнения "сама решает" когда ей память выделить, а когда отдать её обратно....
Хотелось бы конечно подробнее обо всем этом узнать....
Вы хотите скачать файл: 222.wrf
объемом 0.09 мегабайт.
Файл был запрошен 8 раз(а).
Файл был скачан 0 раз(а).
8 человек хотели его посмотреть и не смогли.
Это я 8 раз проверял скачивал его кто-либо или нет:) Хотя ссылка не работает.
Вот, допустим, описан класс, содержащий конструктор init() и деструктор destroy().
init() открывает базу данных, destroy(), соответственно, должен её закрыть.
. Как сказать исполняющей системе, что экземпляр класса надо уничтожить?
Сейчас деструктор у меня вызывается только в момент выхода из плагина.
Я понимаю, что можно определить метод FinalOperation и засунуть туда заключительные операции. Поэтому, несомненно, задаю из праздного любопытства. :-)
Я когда-то тоже интересовался а де деструктор-то задать!!!? Похоже никак. Потом стало интересно как память освободить от объекта...
Единственное что мне пришло в голову по этому поводу это сделать массив обектов, а затем этот массив (ну или элемент массива) обнулить... Хотя я не совсем уверен, что таким образом все работает правильно....
И мне казалось, что конструктором в данном случае выступает метод new() (его, к стати можно "перегрузить", во всяком случае я так делаю, хотя написано что так делать нельзя.)
Алексей Новиков пишет:
Формально функция есть. Но печатать на матричном принтере - увы.
Только если самому написать что-то низкоуровневое.
В б-5, кажется можно другую программу запустить внешнюю и "подождать" пока та не выполниться... Может так можно?
Хотя я не в курсе о чем конкретно речь. (Отдельная программа была на Б-4 для принтера?)
По совету nordik решил запостить проблему с компилятором здесь. Жаль что так и не обратили на нейй внимания в разделе БЭСТ-5.
Чтобы лучше понять о чем идет речь снял видео.
Оно лежит ПО ЭТОЙ ССЫЛКЕ 95 КБ, формат как в презентациях.
P.S. Если я раньше со старым компилятором можно было "лезть куда не надо" и все работало, то теперь вообще невозможно с ним иметь дело :(
Было бы здорово, если бы вышел Hotfix.
С таким скрипом работает текстовый редактор, такое ощущение, что было бы проще "вставить приложение блокнот"(OLE32 объектом) в окно XBA и работать через него....
E.J. пишет:
Так ить наличие/отсутствие строки определяется при создании переменной:
"LOCAL cLockStr :=SUBSTR(dbinfo(10),LEN(B6_DBF_PATH)+1)+STR( IF(EMPTY(nRecNo),RECNO(),nRecNo) ,10,0)"
;-)
Интересно было бы знать каким же это чудесным образом? И при чем тут инициализация переменной cLockStr!!?
А при инициализации этой переменной в 2х разных рабочих областях!???
И запись STR(IF(EMPTY(nRecNo),RECNO(),nRecNo),10,0) означает всего лишь навсего то, что если на вход Semafor(lSet,lNoSay,nRecNo) не был подан номер записи, то будет взят номер текущей записи!!! Но это никоим образом не определяет существует ли cLockStr в списке блокировок на сервере!!!!
Александр Титов пишет:
Лучше ориентироваться на C# и VS2008.
В ближайшем будущем мы откроем такую возможность для сторонних разработчиков.
Это как-то с .net связано? А нельзя сейчас сказать каким образом это (написание на C#) будет работать с БЕСТ? Что именно будет работать с БЭСТ? готовые программы(.exe), библиотеки (.dll), байт-код, или даже исходный C# код?
Просто если речь идет о том, что БЕСТовский компилятор(виртуальная машина) будет работать с промежуточным кодом (байт-код), тогда . Будет ли это налагать опеределенные ограничения? Т.е. будут ограничения на количество winAPI функций...
Или же будет каким-то образом разрешена работа с исполняемым/машинным кодом(*.exe и *.dll в WIN32/64) ?
У меня другой очень сильно интересующий меня .
Функция Semafor:
Код
FUNCTION Semafor(lSet,lNoSay,nRecNo)
LOCAL nRetValue
LOCAL cLockStr:=SUBSTR(dbinfo(10),LEN(B6_DBF_PATH)+1)+STR(IF(EMPTY(nRecNo),RECNO(),nRecNo),10,0)
IF !EMPTY(IsHidden())
RETURN .T.
ENDIF
SrvSetLock(1,cLockStr,IF(lSet,2,0),@nRetValue,.F.)
nRetValue:=EMPTY(nRetValue)
IF lSet.AND.!nRetValue.AND.EMPTY(lNoSay)
IF IsDocObj()
SayError("Запись (документ)"+" редактируется другим пользователем!")
ELSE
SayAndWait("Запись (документ)"+" редактируется другим пользователем!")
ENDIF
ENDIF
RETURN nRetValue
Функция SrvSetLock(...,cLockStr,...) "создает строку" на сервере приложений.
Как узнать наличие итересующей строки??? Проблема в следующем:
Если n раз подряд вызвать Semafor(.T.,,nRecNo) c одним и тем же nRecNo всегда будет возвращено .T.
Смысл в том, что если я заблокировал один раз, то могу и второй раз заблокировать туже запись, но новой строки не появиться в сервере приложений. Меня же интересует каким образом определить существует ли уже строка cLockStr (параметр функции SrvSetLock())!!!! Очень волнует данный .
Меня заинтересовала возможность использования С++. Еще возможность, внедрения графических форм, созданных, скажем в Bulder C++, а еще лучше из Vusual Studio? Заинтересовало потому что, если встанет задача написать что-либо серьезное с графическим интерфейсом, то в существующем дизайнере приложений некоторые вещи вообще представляются невозможными.
Задачи "графитизировать" сейчас вообще нет, но вполне возможно что в недалеком будущем появиться. Может быть есть какая-либо возможность подключать стандартные DLL, разработанные на С++ в Builder'e или в Студии(на С++ или на C#)?
Ирина Глухова пишет:
Изменять системные индексы нельзя. Можно добавлять свои индексы к нашим таблицам. Описывать их нужно в отдельной таблице bases_nn. Не в наших , если по заказам bases_05, а именно в отдельной своей и эту свою таблицу записать в bases_us.
В этом случае при установке последующих SP они все сохраняться и при шттаной индексации будут включены в индексацию.
Если измените в наших bases, то при установки пакета, если мы что-то менеям в индексах, ээто будет заменено.
Полез добвалять новые индексы при установленном СП11. Я понял нужно это делать так:
1. Создаем таблицу bases_55 (например 55).
2. В таблице bases_55 аналогично таблицам beses_nn разработчиков описываем наши новые индексы.
3. Открываем таблицу USER\BASES_US. Добавляем запись:
PP USER\ bases_55.dbf <пусто> Приложение польз.
nordk пишет:
Совершенно не понимаю что нужно.
F_DBUNLOCK() это не то ?
Я не совсем точно выразил то, что мне требуется. Я хочу одним махом убрать сетевые семафоры для одной Таблицы в одной рабочей области. Хотя уже особо не актуально.
Т.е. вместо:
nordk пишет:
Саак давайте такие ы обсуждать на форуме программирования - зашел случайно
Я много плагиновв пишу на XBA и отлаживаю.
У меня еще не пропала ни одна строка.
Давайте по этому у на "наш" форум.
Да я как-то тут начал. В следующий раз на "нашем" напишу. И потом это появилось в СП11 (или СП10, я с 9го на 11й сразу).
Да и дело не конкретно в строке, а в любом изменении...
Не поленюсь и сниму видео, если хотите!!!
Описанная выше ошибка довольно легко воспроизводиться!!!
1. Запускаем редактор XBA.
2. Новый файл
3. Пишем там "Что-нибудь".
4. Правый клик - сохранить.
5. Пишем тамже:С новой строки(Enter), "Что-нибудь еще"
6. Правый клик - сохранить.
Пункты 5 и 6 повторить несколько раз. Лично у меня даже с первого раза "всплывает" баг.
Видим:
"Что нибудь"
А строка с "Что-нибудь еще " просто испарилась!!!!
Сегодня при попытке сделать индексацию получил такое:
"Ошибка копирования файла Best5.dbc..." и еще что-то типа "ошибка открытия файла index.log". Обнаружил, что кроме меня в базу "вошел" другой пользователь и проводил индексацию(понял по обращению к винчестеру сервера БД).
Возможно, он зашел раньше меня, нажал на единственное доступное ему меню, Б-5 предложил ему переиндексироваться.
Я тоже уже вошел в базу и зашел в меню переиндексировать, выбрал БД и получил эти ошибки....
STATIC Function DaysInMonth(dDate)
Local dCurDate:=Stod(Left(DtoS(dDate),6)+"20")+15
dDate:=Stod(Left(DtoS(dDate),6)+"01")
dCurDate:=Stod(Left(DtoS(dCurDate),6)+"01")
return dCurDate-dDate
Догадаться что количество дней в месяце - это разность между первыми числами соседних месяцев было сложнее:)
Доброго времени суток!
Объясните пожалуйта, что такое максимальный уровень входимости, для чего используется?
Именно такое описание дано полю low_lev таблицы okp_inv. Данное поле с нашими настройками везде равно нулю... Но не хотелось бы ошибиться при создании записей в okp_inv.
Иногда проявляется баг:
При редактировании файла.
"Состояние А" Сохраняю. Редактирую дальше. "Состояние Б" Сохраняю. Вместо того чтобы сохранить возвращается к исходному состоянию "Состояние А". Т.е. утрачивается то, что было сделано. Когда такое происходит сказать не могу (специально воспроизвести не получается). Происходит время от времени.