-
С выловом проблема: это происходит ОЧЕНЬ редко буквально 2 раз за полгода. По поведению проявляется нечаянно во время работы - и до перезапуска программы не исчезает. Происходило на нескольких машинах с свежеустановленной WinXP, из неродного софта только дрова на мамку, видеокарточку.
-
А запускаете - из Delphi? В том смысле, что если из Delphi, то ситуацию, очевидно, исправляет перекомпиляция. Вполне возможно, что в компиляторе зацепились неверные значения констант в предыдущем сбойном запуске. На такой сбой мог бы повлиять запуск программы из Delphi без ре-билда проекта сразу ПОСЛЕ того, как устанавливался пакет MCK или компилировался другой проект с сильно отличающимися опциями.
Если это отдельный запуск, то уже такой глюк, какого быть просто не может. Тогда надо выяснять прочие обстоятельства: есть ли в проекте другие меню и другие формы, особенно динамические.
Если не из Delphi, то остаются только - ошибки доступа к памяти. Т.е. наведенка.
-
Не из под Delphi, скажем так, релизный вариант - так что в обязательном порядке делался ре-билд. Происходило на разных машинах одинаковой конфигурацией. На моей машине такого не было ни разу. Другие формы (модальные) есть, динамических меню нет, есть контекстное меню тоже не динамическое.
-
Тогда надо выяснять, что не так с этими машинами, на которых это было. Если машина такая доступна, с ней есть сетевое соединение, можно попробовать собрать проект в режиме remote debug. И запустить хоть несколько сотен раз, до проявления. Хорошо бы при этом наладить какой-то автоматический способ проверить наступление такого события. Например, при доступе к пункту через Items проверять текст меню. Речь ведь идет о доступе не к тем пунктам меню по индексу, так?
Ситуация, скорее всего, никогда не наступит таким способом, если речь идет о действии вируса. Это слабое утешение, так как ненаступление события в N испытаниях не гарантирует ненаступление в (N+1)-ом. Если это вирус, то скорее всего, он не модифицирует экзешник, и портит память.
Это может быть просто физический сбой (память, диск). Маловероятно, но все же.
Если это коммерческий продукт или сколько нибудь серьезное, чем самоделка: я бы обязательно добавил в код проверку типа if MainMenu.ItemText[mm1] <> 'текст пункта меню' ..., если уже такое бывает. Хотя бы сообщить типа "Извините, системный сбой, перезапустите приложение" или просто молча перезапустить с теми же параметрами. Для надежности, чтобы не входило в вечный цикл, в реестре или ини-файле посчитать число перезапусков за секунду, и если стабильно, то выдать сообщение о сбое, сделать копию экзешника (лучше упаковать) и попросить отправить автору.
А уже с этим экзешником можно было бы и поработать. Побайтно сравнить с текущей версией, проверить на вирусы. Если тождественный - проблема глубже. Копать надо, только куда, я сказать со стороны не могу. Было бы оно у меня, я бы время потратил хоть полгода, но источник глюка все равно бы нашел.
-
Машины уходят с пром. оборудованием (как бы странно это не звучало но раз клиент хочет WinXP - любой каприз за его деньги). Вероятность вируса - стремиться к нулю - чистая винда + дрова к мамке - если бы возникало у клиента я бы сразу напомнил о необходимости антивируса, но это у нас на этапе прогона оборудования... Программа при этом ведет себя нормально - за счет того что все меню продублировано на тулбаре - работе это не так сильно мешает. В общем добавлю я несколько проверок и если что-то странное обнаружится отпишу вам.
-
а когда собствено эти все исправления окажуца в коле ?
-
Dufa за svn огромное спасибо. не бросай это дело. удачи.
-
ошибка если заполнять комбобокс строками не важно в дезайнтайме или релтайме то все нормал пока не используеш директиву UNICODE_CTRLS с ней вылетает на добавлении первойже строки
НО!!! у меня версия кол 2.79 проверьте мошт и тут есть
-
у меня в рантайме заполняется комбобокс с помощью метода Add, все работает и с юникодом, и без. Версия KOL 2.90
-
> у меня в рантайме заполняется комбобокс с помощью метода > Add, все работает и с юникодом, и без. Версия KOL 2.90
забавно тестовая пустышка и там и там работает ,а навароченый проект не работает опятьже не там не там выдается AV на первомже ComboBox.Add по поводу kernel32.dll конкретно в Add на строке Result := Perform( fCommandActions.aAddItem, 0, Integer( PKOLChar( S ) ) ); а ище конкретней в function _WStrToPWChar(const S: WideString): PWideChar; модуля System ватафака?
зы и почему в Perform и прочих сендмесажах используеца Integer когда должен быть cardinal?
-
если делать так: ComboBox.Add('впвпавпвпва'); вылетает.... а так нет:
var s:KOLString;
begin
s:='впвпавпвпва';
ComboBox.Add(s);
end;
может это и логично и правильно,но мск генерирует какраз первый вариант и он собствено чудом работает в "простых" проектах ???
-
Функция function DateTime2StrShort( D: TDateTime ): AnsiString; возвращает тип AnsiString. При этом вызывает SystemDate2Str и SystemTime2Str, которые возвращают KOLString. Получается несколько преобразований Ansi <-> Wide. Предлагаю поменять:
function DateTime2StrShort( D: TDateTime ): KOLString;
-
почему в Perform и прочих сендмесажах используеца Integer когда должен быть cardinalВ контексте Perform это безразлично, код генерируется такой же.
function DateTime2StrShort( D: TDateTime ): KOLString; Согласен
если делать так: ComboBox.Add('впвпавпвпва'); вылетает.... Нет, не вылетает. В Delphi5 проверил при включенном UNICODE_CTRLS. В Delphi 7 SE то же самое. Вам придется приготовить достаточно навороченный тестовый проект, чтобы мы могли повторить явления и разобраться, в чем там дело.
-
Функция function Format( const fmt: KOLString; params: Array of const ): KOLString; var Buffer: array[ 0..2047 ] of KOLChar; Если верить MSDN http://msdn.microsoft.com/en-us/library/ms647551(VS.85).aspx , максимальный размер буфера равен 1024 байтам, здесь же выделяется 2 (а в случае unicode_ctrls 4) килобайта. Не принципиально, но лишнее. Предлагаю изменить на var Buffer: array[ 0..1023 ] of byte;
----------
Result := PKOLChar(@Buffer[0]);
-
а сделайте уже чтоб при открытии , проект сам обновлял пути , ато резервные копии папок делаеш а в форме старые пути остаются,и нафига они вобще??? что ктото каждую форму хранит в разной папке а проект в другой?? я про sourcePath и unitsourcePath в колпроект и колформ
-
> Вам придется приготовить достаточно навороченный тестовый > проект, чтобы мы могли повторить явления и разобраться, > в чем там дело.
да пожалста http://narod.ru/disk/20463924000/FileLow.rar.html+ к косяку с комбобоксом, тут ище при буилде тулбар генерирует в *.inс эвенты кнопкам которым они не заданы вообще, ну и еррор соответсно
-
> + к косяку с комбобоксом, тут ище при буилде тулбар генерирует > в *.inс эвенты кнопкам которым они не заданы вообще, ну > и еррор соответсно
А вы как эти эвенты удаляли? Выделили в коде и нажали Del? В dfm они остались. Там еще и ресурсы не существующие цепляются... Вообще странный вы проект выложили, который вообще не компилится.
-
> > Вам придется приготовить достаточно навороченный тестовый > > проект, чтобы мы могли повторить явления и разобраться, > > в чем там дело.
Навороченный проект не нужен. Пустой проект с формой, комбобокс на ней. В опциях проекта UNICODE_CTRLS, в опциях комбобокса coLowerCase или coUpperCase. Этого достаточно. Действительно валится. Почему, разбираться лень, да и не нужно мне это, ни разу не пользовался coLowerCase или coUpperCase.:) Кому нужно пусть копает.
-
MSDN уже в курсе. Comclt32.dll version 5.0 or later: If CBS_LOWERCASE or CBS_UPPERCASE is set, the Unicode version of CB_ADDSTRING alters the string. If using read-only global memory, this causes the application to fail.
-
> А вы как эти эвенты удаляли? Выделили в коде и нажали Del? > В dfm они остались.
в томто и фигня что нет, во первых некоторым кноп я их вообще не назначал, а те у которых удалял ,я удалял код из обработчика и он ясен пень после буилда самоудаляется отовсюду и какова они остались в форме это вопрос к мск, тк в редакторе свойств они пустые...
> опциях комбобокса coLowerCase или coUpperCase. Этого достаточно.
дествительно изза этого... причем ХР вылетает,а в вин7 запускается просто с пустым комбо но ведь через промежуточную переменую работает всегда...
|