Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Borland C++ Builder (все версии) -- ошибки, баги и глюки

Автор: reddestfox
Дата сообщения: 23.10.2006 18:27
Сегодня был такой глюк в BDS 2006 Update1.
У меня между несколькими приложениями, созданными в С++ Builder 2006, организован довольно сложный (для меня) обмен сообщениями (на базе WinAPI).
Так вот: один скрипт, привязанный к нажатию одной кнопки, не работал никак. Я и так, и сяк пробовал -- там всё так запутанно -- 2 часа с лишком промаялся -- не работает скрипт и всё тут. Думал -- ошибка программирования. Искал ошибку -- никак не мог найти.
На поверку оказался глюк -- привязал к той злополучной кнопке простейший скрипт (типа close()), а и тут кнопка не работает -- вот зараза, думаю -- столько времени зря убил.
Удалил эту кнопку, создал новую, проверил её работу на простом скрипте -- работает, подставил нужный скрипт -- и тут всё заработало, как по маслу.
Вот уж никогда не подумал бы, что в кнопке дело окажется...
Автор: reddestfox
Дата сообщения: 25.10.2006 11:12
1. Хочу заметить, что, хотя в BDS2006 справку сделали и шикарную (на ХТМЛ), но в старой (2002 6 Бильдер) убогой (не ХТМЛ) справке по каждой команде есть пример, чего нет здесь. Поэтому лучший вариант -- использовать обе справки совместно.
2. Общий баг для всех версий Бильдера (включая последнюю): если в редакторе кода написаны обработчики (без ошибок, естественно, как полагается), а во вкладке Events соответствующего объекта ссылки нет, то ничего работать не будет: нет обратной связи между кодом и событиями объекта в графическом редакторе. Пример: был скрипт по обработке формы OnCreate, написанный в редакторе кода. Скрипт не работал, пока не нажал два раза мышкой на образ формы (или можно было нажать OnCreate на вкладке Events). Тогда Бильдер открывает уже написанный код на нужном месте и всё работает. Но пока этого не сделаешь -- всё бесполезно. Опять промучился в связи с этим полвечера вчера...
Автор: Jokerjar
Дата сообщения: 25.10.2006 15:49
Не могу откомпилировать проект. Ошибка возникает при линковке:

[Linker Error] Unresolved external 'WSAStringToAddressA' referenced from D:\КЛИЕНТ\UNIT1.OBJ

В исходнике ошибок не находит (функцию вызываю с правильыми параметрами)

Что это значит?
Автор: OdesitVadim
Дата сообщения: 25.10.2006 16:02
reddestfox
Цитата:
если в редакторе кода написаны обработчики (без ошибок, естественно, как полагается), а во вкладке Events соответствующего объекта ссылки нет, то ничего работать не будет


Это не баг. И даже не особенность. Это нежелание мыслить логически с вашей стороны. Для того, что бы обработчики "дёргались" не нужно, что бы у них были определённые имена. Нужно что бы обработчик был привязан к нужному событию (это как раз и делает инспектор объектов) и сигнатура метода совпадала (тобыш количество и типы параметров). Почему же, вы спросите он отображает только один метод, если открыть ComboBox? А просто только один по сигнатуре и подошёл.
Благодаря этому подходу, можно поставить 10 кнопок. Для первой написать обработчик обычным методом, а для других подцепить и в результате все будут выполнять один метод. А для различия того, кто же вызвал метод как раз и применяется Sender.

Цитата:
скрипт по обработке формы OnCreate

Говорите правильно. В этой фразе просто куча ошибок. Правильно она должна выглядеть так

Цитата:
обработчик события OnCreate формы

----

Цитата:
написанный в редакторе кода

Билдер не телепат, и не может догадаться, что вы написали обработчик. А при клике в инспекторе он обнаруживает, что есть метод с именем, который он ожидал.
Автор: ItsJustMe
Дата сообщения: 25.10.2006 20:09
OdesitVadim
Хорошо сказал!

Jokerjar
Подключи ту либу, где содержится WSAStringToAddressA (посмотри по MSDN). И будет тебе счастье.
Автор: Jokerjar
Дата сообщения: 26.10.2006 01:19
ItsJustMe, я ее естессно подключил! (winsock2). Более того, я даже ее правильно вызвал. При компиляции строка с функцией не окрашивается в коричневый цвет, характерный для строк с ошибками в синтаксисе. Но прога не компилится. Ошибка на этапе линковки
Автор: OdesitVadim
Дата сообщения: 26.10.2006 10:48
Jokerjar
линковщик не может найти нужную либу. Возможно, пути поиска, которые ему прописаны не содержат нужную либу. А компилятор может видеть нужный h файл
Автор: Jokerjar
Дата сообщения: 26.10.2006 12:30
OdesitVadim, ну и что посоветуешь делать? Кстати, заметил, что и использование некоторых других функций из winsok2 вызывает эту же ошибку. Например, WSArecvtTo (регистр не помню)
Автор: OdesitVadim
Дата сообщения: 26.10.2006 14:47
Jokerjar
Прописать пути линковщику
Автор: Jokerjar
Дата сообщения: 26.10.2006 15:14
OdesitVadim, а можно поподробней? Извиняй, в Си я (стучит по голове) . Всегда писал на делфи, устраивало. А вот надо курсовик на Си...
Автор: reddestfox
Дата сообщения: 27.10.2006 21:41
OdesitVadim
Критика принята.
Я про отсутствие обратной связи.
Ну неужели нельзя было сделать обратную связь -- обработчик написан, переходим на форму, и тут Бильдер проверяет, что за обработчик мы написАли -- OnCreate есть OnCreate, OnClose -- OnClose и т.д. Здесь двоякости быть не может. Ну и бац -- автоматом устанавливает нужную связь. Сам. Без тычков мышкой. Так что упрёк в отсутствии логического мышления не могу принять никак.
Я понимаю, конечно, что всё наоборот сделал -- надо было сначала мышкой на OnCreate или OnClose тыкнуть и в любезно открывшемся редакторе кода писАть обработчик для этого события.
Но если обработчик написан заранее -- неплохо бы организовать и обратную связь. Тем более, повторюсь, здесь всё однозначно и разночтений быть не может. Могли б тут поинтеллектуальней сделать, ИМХО...

Ещё в BDS2006 старые примеры почти все убрали, а новых никаких не добавили, и всё это безобразие из examples переименовали в Demos. Новое хреновое отличие.
Автор: EZH
Дата сообщения: 27.10.2006 23:44
reddestfox
Интеллектуальность конечно хорошо, но только в нужном и очевидном месте, где не может возникнуть никаких разночтений.

В твоем случае, казалось бы как раз таком совсем очевидном, это не так. Дело в том что в практике программирования программеру частенько приходится эти самые обработчики событий то включать, то выключать. Это действительно бывает нужно или является наиболее простым методом избежать лишних проблем с ненужными в определенный момент вызовами этих обработчиков.

А теперь представь что определенный обработчик по замыслу программера должен начать работать далеко не с начала работы самой программы. Т.е. программер обработчик то написал, но включить его собирается потом, при определенном условии. А сверхинтеллектуальный билдер его уже оказывается сам включил прямо к самому началу работы программы. Какими "хорошими" словами в этом случае программер будет вспоминать создателей билдера?
Автор: reddestfox
Дата сообщения: 27.10.2006 23:50
EZH
Положил на обе лопатки.
Был полностью неправ, за что всем причастным приношу свои извинения.
Оправдание -- неопытность (для института лабы в Бильдере делаю), а так -- не имею отношения.
А с другой стороны -- если б сделал всё как положено -- вначале пнул бы OnCreate (Close), а затем обработчик бы написАл, то не было бы и понимания.
Я к тому, что положительная сторона тут всё же есть (по крайней мере, для меня).
Спасибо EZH и OdesitVadim.

Автор: makkonen
Дата сообщения: 30.10.2006 21:37
Извините, может пишу не туда. Тему новую создавать не хочу их итак много. Вобщем излагаю проблему. Я новис плиз хелп. У меня итеративно с бектрекингом используется кодирование фигуры. Там применяются преобразования к каждой точке. всего их 16(преобразований) На 4 итерации вылетает ошибка stek overflow (вроде так, сори если неправильно написал, знающие поймут) Вобщем вопрос. Как избавится от этой бяки? Можно как-нить почистить стек системный? Просто когда выполнил 1 итерацию, уже нет необходимости держать инфу ней. Понимаю, что это не очень хороший стиль программирования, и не надо говорить об этом, я и сам понимаю. Жду возможные решения. Спасибо...
Автор: reddestfox
Дата сообщения: 01.11.2006 22:44
makkonen
Попробуй, задай свой вопрос здесь.
Автор: fmhstar
Дата сообщения: 28.12.2006 12:56
Столкнулся с проблемой - не могу установить C++ Builder 6 на новую машину на работе.
Машина: HP-Compaq dx7300 (iPentium D 3 GHz / 512 RAM / всё только SATA - IDE даже не пахнет) с свежеустановленной WinXP Pro Corp SP2. Собственно, кроме системы и офиса 2003 там ничего нет и я только сейчас поставил BDS2006.
После установки всех параметров инсталляции и нажатия последнего (перед непосредственно инсталляцией) инсталлятор выдает, что не может modified мою систему и предлагает позже попробовать установить. Естественно, никакие "позже" не помогают.
Вопрос классический: что делать?
P.S. Единственное предположение: может с двухядерностью процессора связано?
Автор: Garrett
Дата сообщения: 03.01.2007 23:12
fmhstar
У Вашей учетной записи есть права администратора?
Автор: Uilkinson
Дата сообщения: 11.02.2008 17:47
Собрал комп, наставил софт на ХР сп2
C2D E6850
ASUS P5K-E/Wi-Fi-AP LGA775 ATX
DDR II 2048Mb PC6400 800 Mhz Hynix 1
ATX 550W FSP EPS 12V (FSP550-60PLN/Intel)
Palit GF 8600GT 512Mb DDR3 128bit
ЕСТЬ ПРОБЛЕМЫ
Например MathCad13 gпри закрытии выдает
runtime error 216 at 0008A3A4
есть и
Ошибка доступа по адресу 7638AEB4 в модуле comdlg32.dll. Чтение по адресу 0000000

можно ли обновить системные dll и прочее!? Как избавиться от ошибки? Может дело в новом железе?
Автор: Tantos
Дата сообщения: 12.02.2008 05:02
Uilkinson, а каким макаром это к Билдеру относится? Я бы на твоем месте начал с чистки и дефрагментации реестра и убийства ненужных программ.
Автор: rvsn12
Дата сообщения: 12.02.2008 09:55
Если у кого есть возможность, выложите "Borland C++Builder 6.0 Enterprise ilink patch (v.5.66)", нигде не могу скачать.
Автор: Tantos
Дата сообщения: 13.02.2008 03:46
rvsn12, в Варезнике поспрашивай: Коммерческие компоненты и утилиты для Delphi/BCB.
Автор: BugDigger
Дата сообщения: 23.04.2008 07:42
BCB из RAD2007 + Win2k.

Вчера началось. После установки апрельского хотфикса у меня линковка (которая раньше шла какие-то 10-15 секунд) стала идти минуты полторы !! Винчестер грызет, аж трясётся... При этом версия линкера прежняя (от 27.08.2008).

Пробовал создать просто пустой проект, компилит мгновенно, линкует минуту. Если сменить, например, Caption формы (это ресурс), опять линкует столько же.

Кто-нибудь имеет такие проблемы? М.б. и не хотфикс виноват, а какой-нибудь недавний виндовый апдейт (вроде пролетал недавно виндовый апдейт для .net) ?
Автор: mrrex
Дата сообщения: 25.04.2008 21:19
BugDigger

не. хотфикс вполне нормален. Проверил на двух компах.
чей-то другое ищи.
Автор: romantic2
Дата сообщения: 14.10.2008 02:10
Здравствуйте, господа. У меня стоит CodeGear C++ Builder и вот какая штука у меня возникла: с некоторого момента в редакторе при попытке вписать что-либо в середину слова, текста и т. д. - новые символы стирают впереди стоящие символы! Работать просто невозможно. Перезагрузка не помогла.

Искал ответ в инете и здесь, не нашёл.

Заранее спасибо!
Автор: Tantos
Дата сообщения: 15.10.2008 03:23
romantic2
А клавишу Insert нажать не пробовал?
Автор: romantic2
Дата сообщения: 15.10.2008 18:15
Tantos

Спасибо огромное) Поколение Пепси, знаете ли, что тут поделаешь...
Автор: Ape
Дата сообщения: 16.11.2009 23:51
Встречался кто нибудь с таким глюком в BCB6:
После релизной сборки проекта, некоторым строковым переменным присваиваются значения "от фонаря". Например, в одном месте указываю переменную String X = "abcd"; А она оказывается "009". Откуда взялось значение "009", хрен его знает. В дебаг режиме такая хрень не возникает.
Автор: BaksoGen1998
Дата сообщения: 20.11.2009 09:18
Ape Вообще для решения такой проблемы надо исходник смотреть. Может у тебя какой-либо динамический массив накладывается на переменную или другая подобная проблема. Не удивлюсь если при таких проблемах иногда программа вылетает с ошибками по защите памяти... Скорее всего проблема в логика программы.
Автор: MorSe
Дата сообщения: 27.06.2014 23:11
Есть исходники с вариадическими макросами, например

Код: #define FOO(...) function(__VA_ARGS__)
Автор: XWise
Дата сообщения: 18.08.2015 11:56
замечен следующий глюк на BCBuilder 6.0 (4 патча установлены)

переменная типа unsigned __int64, ошибка при применении к ней операнда >>=, то есть, если:

unsigned __int64 var1 = 0x4E4E4E4E4E4E4E4E;
var1 >>= 8; // УПС! Access violation по адресу 0x4E4E4E4Exxxx

а вот так работает без проблем:

var1 = var1 >> 8;

Страницы: 12

Предыдущая тема: Advantage Table


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.