-
Какие могут быть причины?
-
> Какие могут быть причины?
Ошибка в программе.
-
приложение падает на initialization какого-то юнита
-
Provides an opportunity to initialize subsystems.
Delphi syntax:
procedure Initialize;
C++ syntax:
void __fastcall Initialize(void);
Description
Initialize is the first method called by the project source file. It calls the InitProc procedure pointer. By default, the call to Initialize for the application does nothing because the default InitProc pointer is nil (Delphi) or NULL (C++) .
To use Initialize, the InitProc pointer must be predefined. This can be accomplished in one of two ways:
In Delphi, you can include a unit that assigns a procedure to InitProc in its initialization section, such as the ComObj unit. You can make this assignment in the initialization section of any of your units.
In both Delphi and C++, you can create a custom initialization procedure that assigns a value to the InitProc pointer, and add a call to this procedure to the project source prior to the call to Initialize. (In Delphi, you can add it to the initialization section of the unit in which it is declared. In C++, you can use the pragma startup directive in that unit.)
Warning: Only one instance of InitProc can be defined in an application. If more than one unit assigns a value to InitProc, only the last assignment will work. You can, however, call the previous value of InitProc from an initialization procedure, so that all initialization procedures are executed.
For projects that do not assign a value to InitProc, the call to Initialize can be safely deleted from the project source.
Note: Although Initialize is the first method called in the main project source code, it is not the first code that is executed in a GUI application. For example, in Delphi, the application first executes the initialization section of all the units used by the application.
-
> приложение падает на initialization какого-то юнита
Не-а. К разделам initialization юнитов в составе проекта метод Application.Initialize отношения не имеет.
-
То бишь код этих разделов выполняется до вызова этого метода. Которого, впрочем, за неимением объекта Application может вообще и не быть, что никак не мешает инициализации юнитов.
-
> keymaster (22.08.2008 16:12:00) [0]
На данной строке нажать F7
> Initialize is the first method called by the project source file. It calls the InitProc procedure pointer. By default, the call to Initialize for the application does nothing because the default InitProc pointer is nil
-
> Anatoly Podgoretsky © (22.08.08 16:27) [6] > > keymaster (22.08.2008 16:12:00) [0]На данной строке > нажать F7> Initialize is the first method called by the > project source file. It calls the InitProc procedure pointer. > By default, the call to Initialize for the application > does nothing because the default InitProc pointer is nil
Там пусто. Никаких указателей не используем. Вопрос ещё в том, что глюк воспроизводится только на одной машине. На машинах разработчиков и почти на всех пользовательских - всё работает как надо.
-
> keymaster (22.08.2008 16:37:07) [7]
Отсюда делаем единственный вывод - Приложение падает не на Application.Initialize;
-
> Вопрос ещё в том, что глюк воспроизводится только на одной > машине.
Если это не машина разработчиков - ты уверен, что там у тебя актуальная версия исходников?
-
> ты уверен, что там у тебя актуальная версия исходников?
хм.. а причем тут исходники на машине, где работает экзешник?
-
> Anatoly Podgoretsky © (22.08.08 16:43) [8] > > keymaster (22.08.2008 16:37:07) [7]Отсюда делаем единственный > вывод - Приложение падает не на Application.Initialize;
Пишем лог с первой строки. Всё, что до Application.Initialize - работает. На строке Application.Initialize появляется AV
-
> Пишем лог с первой строки. > Всё, что до Application.Initialize - работает. > На строке Application.Initialize появляется AV
а содержимое строчек является Главной Военной Тайной ?
-
> clickmaker © (22.08.08 16:47) [10] > > ты уверен, что там у тебя актуальная версия исходников? > > > хм.. а причем тут исходники на машине, где работает экзешник? >
Я ж предположил, что он до Applicaton.Initialize добрался отладчиком. А если он там лог пишет... нууу, это еще ни о чем не говорит :)
-
> а содержимое строчек является Главной Военной Тайной ?
Строка первая, идёт сразу после begin: 22.08.2008 15:42 Application Started Строка вторая - там работает FindWindow (для поиска запущеных копий приложения): 22.08.2008 15:42 FindWindow Result = Not Found Строка третья: Application Initialize
А дальше - AV
-
Код, выполняемый выше Application.Initialize, разрушает стек.
-
Вщзможно, что-то напортачено с выделением/освобождением памяти под параметры PChar в FindWindow?
-
> Строка первая, идёт сразу после begin: > 22.08.2008 15:42 Application Started > Строка вторая - там работает FindWindow (для поиска запущеных > копий приложения): > 22.08.2008 15:42 FindWindow Result = Not Found > Строка третья: > Application Initialize > > А дальше - AV
Я уже понял, что ты партизан, а форум - злобные гестаповцы. Можешь хранить свою военную тайну дальше, тебе медаль дадут за стойкость.
-
> тебе медаль дадут за стойкость.
Посмертно! (((
-
> Юрий Зотов © (22.08.08 18:58) [16] > Вщзможно, что-то напортачено с выделением/освобождением > памяти под параметры PChar в FindWindow?
Хм... Тогда почему: а) не падает на строке с FindWindow б) работает на всех компах, кроме одного...
|