Конференция "Прочее" » Ошибка загрузки dll. at $7C812A5B. Почему такое может быть?
 
  • Vlad Oshin © (21.10.08 11:53) [0]
    Есть программа и 12 dll.

    В dpr стоит в первых строках
     JclStackTrackingOptions :=  [stExceptFrame, stStack,  stRawMode, stAllModules, stStaticModuleList];
     JclStartExceptionTracking;
     JclAddExceptNotifier(LogException);  



    соответственно проседура
    procedure LogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean);
    var
     mmLog: String;
     ModInfo: TJclLocationInfo;
    begin
     try
       ModInfo := GetLocationInfo(ExceptAddr);
       mmLog:=Format(
         #13#10+'Exception occured at $%p '+#13#10+
         'Module \"%s\"'+#13#10+
         'Procedure \"%s\"'+#13#10+
         'Unit \"%s\"'+#13#10+
         'Line %d',
         [ModInfo.Address,
          ModInfo.UnitName,
          ModInfo.ProcedureName,
          ModInfo.SourceName,
          ModInfo.LineNumber]);
       WriteToLog(mmLog);
     Except
     end;
    end;



    Вчера все работало. Сегодня поправил 2 из них(написал несколько отправок сообщений главной форме app по нажатию на кнопки).

    Лог
    DateTime: 21.10.2008 11:31:26
    NumeroQuattro.Департамент: module NQItem.dll attach process
    ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 11:31:26
    NumeroQuattro.Департамент: module NQItemGroup.dll attach process
    ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 11:31:26
    Exception occured at $7C812A5B Module "" Procedure "RaiseException" Unit "" Line 0----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 11:31:26
    NumeroQuattro.Департамент: module NQReport.dll attach process


    dll NQItemGroup.dll не трогал сегодня вообще!!
    что она из себя представляет: форма, на ней cxDBTreeList(DevExpress), панель, 4кнопки
    Соответственно, отображает дерево из БД, можно выбрать что-то. И "что-то" засылается сообщением далее. Да это и не важно. После этой ошибки дерево при вызове пустое. Данные не считались.
    Все dll делаются по шаблону. Эта - единственная, где исп. cxDBTreeList. Везде в других исп. cxGrid, едиты, комбо, и т.п.
    Тут тоже, но + cxDBTreeList.

    То ли с ним проблемы, то ли с чем?
    Есть какие мысли?
  • Vlad Oshin © (21.10.08 12:01) [1]
    ничего не понимаю..
    А судя по стеку

    NQ.LogException(???,$7C812A5B,???)
    JclHookExcept.TNotifierItem.DoNotify(???,???,True)
    JclHookExcept.DoExceptNotify($196F0F0,$7C812A5B,True)
    JclHookExcept.HookedExceptObjProc(???)
    :51f26b4d @HandleAnyException + $35
    :7c90378b ntdll.RtlConvertUlongToLargeInteger + 0x46
    :7c90eafa ntdll.KiUserExceptionDispatcher + 0xe
    :030d0258 SetThreadName + $48
    :0310b793 IdThread + $13
    :51f2747c @StartLib + $C4
    :7c9011a7 ntdll.LdrInitializeThunk + 0x29
    :7c91cbab ; ntdll.dll
    :7c916178 ; ntdll.dll
    :7c9162da ; ntdll.dll
    :7c801bb9 kernel32.LoadLibraryExW + 0xc8
    :7c801d6e kernel32.LoadLibraryExA + 0x1f
    :7c801da4 kernel32.LoadLibraryA + 0x2d
    formMain.TfrmMain._LoadLibrary(???,'NQReport',('Software', 'ЗАО «ТД «ПЕРЕКРЕСТОК»', 'NQ', 'User', 'Owner', 'NQ', 'NumeroQuattro.Департамент', 'C:\delphi\nq\NQ.ini', True, (18, 29376, 20997, 29384)),$17C26A0)
    formMain.TfrmMain._LoadLibraries($17BB470,$17EFEE0,$17C26A0)
    formMain.TfrmMain.Create(???)
    :5207946c TApplication.CreateForm + $34
    NQ.NQ
    :7c816fd7 kernel32.RegisterWaitForInputIdle + 0x49

    NQReport.dll лажанулась .. (впрочем, ее тоже не трогал)
  • clickmaker © (21.10.08 12:24) [2]
    а в секции initialization там есть что-нить?
  • Vlad Oshin © (21.10.08 14:24) [3]
    нет, ничего нет.
    Все что возможно загнал в try except WriteToLog('ТУТ!!'); (да все вообще, почти каждую строчку)
    Все прошел по F8-F7,
    не пойму где ошибка..
  • Eraser © (21.10.08 14:29) [4]
    > [3] Vlad Oshin ©   (21.10.08 14:24)

    в опциях компилятора Run time errors включи range checking и поработай с программой в разных режимах.
    скорее всего что-то где-то явно портит память процесса.
    возможно поможет выявить это место замена Free на FreeAndNil в спорных местах.
  • Vlad Oshin © (21.10.08 15:26) [5]

    > в опциях компилятора Run time errors включи range checking

    включено

    > Free на FreeAndNil в спорных местах.

    заменил на Free и :=nil, во всех местах

    ничего..
    -----------------
    переписал

    {$IFDEF INLOG2}
    procedure LogException(ExceptObj: TObject; ExceptAddr: Pointer; IsOS: Boolean);
    var
     mmLog: String;
     ModInfo: TJclLocationInfo;
    begin
     try
       ModInfo := GetLocationInfo(ExceptAddr);
       mmLog:=Format(
         #13#10+'Exception occured at $%p '+#13#10+
         'Module \"%s\"'+#13#10+
         'Procedure \"%s\"'+#13#10+
         'Unit \"%s\"'+#13#10+
         'Line %d',
         [ModInfo.Address,
          ModInfo.UnitName,
          ModInfo.ProcedureName,
          ModInfo.SourceName,
          ModInfo.LineNumber]);
       WriteToLog(mmLog+' '+SysErrorMessage(GetLastError));
     Except
     end;
    end;
    {$ENDIF}



    поменял порядок загрузки dll, теперь явно видно, что хромает Report, где бы не стояла - на ней ошибается

    Try LoadLibrary |NQBasket|
    ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07
    NumeroQuattro.Департамент: module NQBasket.dll attach process
    ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07
    Try LoadLibrary |NQReport|
    ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07
    Exception occured at $7C812A5B Module "" Procedure "RaiseException" Unit "" Line 0 Не удается найти указанный файл
    ----------------------------------------------------------------------------------------------------------------------- DateTime: 21.10.2008 15:15:07
    NumeroQuattro.Департамент: module NQReport.dll attach process


    Отключил в ней возможности передачи отчета по почте
    IdMessage, IdCoderHeader,IdAttachmentFile,IdText, idSMTP

    Заработало.
    Чем indy может так шалить?
  • Eraser © (21.10.08 15:31) [6]
    > [5] Vlad Oshin ©   (21.10.08 15:26)

    скорее всего не все так просто. это самый страшный тип ошибки, она может возникать где угодно, при значительном изменении структуры кода (добавление/удаление какого либо модуля) может вообще, казалось бы, исчезнуть.
    поищи в своем коде, касающимся Indy и писем ошибки, но вряд ли найдешь думаю.. ошибка в каком-то "левом" месте.. возможно при инициализации/загрузки чего то, imho с этой стороны копать надо.
  • clickmaker © (21.10.08 15:59) [7]
    > IdMessage, IdCoderHeader,IdAttachmentFile,IdText, idSMTP

    смотри, что там может косячить в initialization
  • Petr V. Abramov © (21.10.08 16:43) [8]
    а
    uses sharemem

    в первых строках соит?
  • Vlad Oshin © (21.10.08 17:38) [9]

    > Petr V. Abramov ©   (21.10.08 16:43) [8]
    > а uses sharemem в первых строках соит?

    использую Fast Memory Manager 4.84
 
Конференция "Прочее" » Ошибка загрузки dll. at $7C812A5B. Почему такое может быть?
Есть новые Нет новых   [134444   +22][b:0][p:0.002]