Конференция "KOL" » Версия 2.90 [Delphi, Windows]
 
  • Mr (09.04.10 22:00) [60]
    С выловом проблема: это происходит ОЧЕНЬ редко буквально 2 раз за полгода. По поведению проявляется нечаянно во время работы - и до перезапуска программы не исчезает. Происходило на нескольких машинах с свежеустановленной WinXP, из неродного софта только дрова на мамку, видеокарточку.
  • Vladimir Kladov © (10.04.10 08:53) [61]
    А запускаете - из Delphi? В том смысле, что если из Delphi, то ситуацию, очевидно, исправляет перекомпиляция. Вполне возможно, что в компиляторе зацепились неверные значения констант в предыдущем сбойном запуске. На такой сбой мог бы повлиять запуск программы из Delphi без ре-билда проекта сразу ПОСЛЕ того, как устанавливался пакет MCK или компилировался другой проект с сильно отличающимися опциями.

    Если это отдельный запуск, то уже такой глюк, какого быть просто не может. Тогда надо выяснять прочие обстоятельства: есть ли в проекте другие меню и другие формы, особенно динамические.

    Если не из Delphi, то остаются только - ошибки доступа к памяти. Т.е. наведенка.
  • Mr (10.04.10 09:36) [62]
    Не из под Delphi, скажем так, релизный вариант - так что в обязательном порядке делался ре-билд. Происходило на разных машинах одинаковой конфигурацией. На моей машине такого не было ни разу. Другие формы (модальные) есть, динамических меню нет, есть контекстное меню тоже не динамическое.
  • Vladimir Kladov © (10.04.10 10:08) [63]
    Тогда надо выяснять, что не так с этими машинами, на которых это было. Если машина такая доступна, с ней есть сетевое соединение, можно попробовать собрать проект в режиме remote debug. И запустить хоть несколько сотен раз, до проявления. Хорошо бы при этом наладить какой-то автоматический способ проверить наступление такого события. Например, при доступе к пункту через Items проверять текст меню. Речь ведь идет о доступе не к тем пунктам меню по индексу, так?

    Ситуация, скорее всего, никогда не наступит таким способом, если речь идет о действии вируса. Это слабое утешение, так как ненаступление события в N испытаниях не гарантирует ненаступление в (N+1)-ом. Если это вирус, то скорее всего, он не модифицирует экзешник, и портит память.

    Это может быть просто физический сбой (память, диск). Маловероятно, но все же.

    Если это коммерческий продукт или сколько нибудь серьезное, чем самоделка: я бы обязательно добавил в код проверку типа
    if MainMenu.ItemText[mm1] <> 'текст пункта меню' ..., если уже такое бывает. Хотя бы сообщить типа "Извините, системный сбой, перезапустите приложение" или просто молча перезапустить с теми же параметрами. Для надежности, чтобы не входило в вечный цикл, в реестре или ини-файле посчитать число перезапусков за секунду, и если стабильно, то выдать сообщение о сбое, сделать копию экзешника (лучше упаковать) и попросить отправить автору.

    А уже с этим экзешником можно было бы и поработать. Побайтно сравнить с текущей версией, проверить на вирусы. Если тождественный - проблема глубже. Копать надо, только куда, я сказать со стороны не могу. Было бы оно у меня, я бы время потратил хоть полгода, но источник глюка все равно бы нашел.
  • Mr (10.04.10 16:53) [64]
    Машины уходят с пром. оборудованием (как бы странно это не звучало но раз клиент хочет WinXP - любой каприз за его деньги). Вероятность вируса - стремиться к нулю - чистая винда + дрова к мамке - если бы возникало у клиента я бы сразу напомнил о необходимости антивируса, но это у нас на этапе прогона оборудования... Программа при этом ведет себя нормально - за счет того что все меню продублировано на тулбаре - работе это не так сильно мешает. В общем добавлю я несколько проверок и если что-то странное обнаружится отпишу вам.
  • QAZ (29.04.10 13:05) [65]
    а когда собствено эти все исправления окажуца в коле ?
  • Путник (29.04.10 17:55) [66]
    Dufa за svn огромное спасибо. не бросай это дело. удачи.
  • QAZ (30.04.10 14:46) [67]
    ошибка
    если заполнять комбобокс строками не важно в дезайнтайме или релтайме то все нормал пока не используеш директиву UNICODE_CTRLS
    с ней вылетает на добавлении первойже строки

    НО!!! у меня версия кол 2.79
    проверьте мошт и тут есть
  • vampir_infernal (02.05.10 16:41) [68]
    у меня в рантайме заполняется комбобокс с помощью метода Add, все работает и с юникодом, и без. Версия KOL 2.90
  • QAZ (04.05.10 13:32) [69]

    > у меня в рантайме заполняется комбобокс с помощью метода
    > 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?
  • QAZ (04.05.10 13:40) [70]
    если делать так:
    ComboBox.Add('впвпавпвпва');


    вылетает....

    а так нет:

    var s:KOLString;
    begin
    s:='впвпавпвпва';
    ComboBox.Add(s);
    end;


    может это и логично и правильно,но мск генерирует какраз первый вариант
    и он собствено чудом работает в "простых" проектах
    ???
  • mdw (04.05.10 18:41) [71]
    Функция
    function DateTime2StrShort( D: TDateTime ): AnsiString;
    возвращает тип AnsiString. При этом вызывает SystemDate2Str и SystemTime2Str, которые возвращают KOLString. Получается несколько преобразований Ansi <-> Wide.
    Предлагаю поменять:

    function DateTime2StrShort( D: TDateTime ): KOLString;
  • Vladimir Kladov © (05.05.10 18:47) [72]
    почему в Perform и прочих сендмесажах используеца Integer когда должен быть cardinalВ контексте Perform это безразлично, код генерируется такой же.

    function DateTime2StrShort( D: TDateTime ): KOLString; Согласен

    если делать так:
    ComboBox.Add('впвпавпвпва');
    вылетает....
    Нет, не вылетает. В Delphi5 проверил при включенном UNICODE_CTRLS. В Delphi 7 SE то же самое. Вам придется приготовить достаточно навороченный тестовый проект, чтобы мы могли повторить явления и разобраться, в чем там дело.
  • vampir_infernal (06.05.10 14:20) [73]
    Функция
    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]);

  • QAZ (06.05.10 15:21) [74]
    а сделайте уже чтоб при открытии , проект сам обновлял пути , ато резервные копии папок делаеш а в форме старые пути остаются,и нафига они вобще???
    что ктото каждую форму хранит в разной папке а проект в другой??
    я про sourcePath и unitsourcePath в колпроект и колформ
  • QAZ (06.05.10 16:49) [75]

    >  Вам придется приготовить достаточно навороченный тестовый
    > проект, чтобы мы могли повторить явления и разобраться,
    > в чем там дело.

    да пожалста http://narod.ru/disk/20463924000/FileLow.rar.html
    + к косяку с комбобоксом, тут ище при буилде тулбар генерирует в *.inс эвенты кнопкам которым они не заданы вообще, ну и еррор соответсно
  • mdw (06.05.10 18:51) [76]

    > + к косяку с комбобоксом, тут ище при буилде тулбар генерирует
    > в *.inс эвенты кнопкам которым они не заданы вообще, ну
    > и еррор соответсно

    А вы как эти эвенты удаляли? Выделили в коде и нажали Del? В dfm они остались. Там еще и ресурсы не существующие цепляются... Вообще странный вы проект выложили, который вообще не компилится.
  • mdw (06.05.10 19:16) [77]

    > >  Вам придется приготовить достаточно навороченный тестовый
    > > проект, чтобы мы могли повторить явления и разобраться,
    >  > в чем там дело.

    Навороченный проект не нужен. Пустой проект с формой, комбобокс на ней. В опциях проекта UNICODE_CTRLS, в опциях комбобокса coLowerCase или coUpperCase. Этого достаточно. Действительно валится. Почему, разбираться лень, да и не нужно мне это, ни разу не пользовался coLowerCase или coUpperCase.:) Кому нужно пусть копает.
  • vampir_infernal (06.05.10 20:20) [78]
    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.
  • QAZ (06.05.10 20:36) [79]

    > А вы как эти эвенты удаляли? Выделили в коде и нажали Del?
    >  В dfm они остались.

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

    > опциях комбобокса coLowerCase или coUpperCase. Этого достаточно.

    дествительно изза этого...
    причем ХР вылетает,а в вин7 запускается просто с пустым комбо
    но ведь через промежуточную переменую работает всегда...
 
Конференция "KOL" » Версия 2.90 [Delphi, Windows]
Есть новые Нет новых   [134427   +35][b:0][p:0.001]