![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| CPlusPlusFAN |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Нет. Я не ошибся разделом. Это действитьльно по C++.
Я запускаю jar файл с контролем памяти:
Здесь я привёл не весь код, только отдельные участки. Когда запускается приложение не на Java, всё работает. Как только запускаются jar файлы, происходит следующее: первое скомпилированное приложение работает нормально начиная со второго приложение отказывается запускаться Проблему решает код:
Это срабатывает, если убрать строки:
Однако это меня не устраивает (контроль памяти нужен). Если вышеприведённый код присутствует, то при обработке кода:
возникает ошибка External exception C0000008. ![]() Т.е. чтобы работала прога, нужно удаление image файла. Чтобы можно было удалить image файл, нужно убрать контроль памяти. Если убрать контроль памяти, прога не будет работать. Как мне быть? Это сообщение отредактировал(а) CPlusPlusFAN - 22.3.2008, 19:36 |
||||||||
|
|||||||||
| korian |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 4 Всего: 17 |
я сам хз, скажу некоторые соображения, которые появились при прочтения MSDN
я так понимаю de.u.CreateProcessInfo.hFile надо сохранять куда-нить в момент сообщения CREATE_PROCESS_DEBUG_EVENT. потом оно может быть не действительно. и закрывать поидее надо до последнего ContinueDebugEvent() |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Уважаемый dumb, можно немного поподробней, а то я после PHP тяжело въезжаю. Это сообщение отредактировал(а) CPlusPlusFAN - 24.3.2008, 13:18 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
примерно так:
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
dumb, изменил, как ты сказал: снова External exception C0000008.
Если убрать de.u.CreateProcessInfo.hFile=NULL; такая же лажа. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
нет, тут суть не в самой проверке, а в том, что это действие должно производиться тогда, когда de.dwDebugEventCode равен именно CREATE_PROCESS_DEBUG_EVENT.
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Вот полный код.
Первый исходник компилится (с флагом exception==false) и работает на всех тестах. А второй компилится, но не запускается. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
так как воспроизвести твои условия не представляется возможным, то тут только одна рекомендация: осваивай отладчик билдеровский.
код вроде выглядит вполне рабочим, с небольшими огрехами: не проверяется результат CreateProcess, упрощенная схема пропуска первого системного брекпоинта(там, где флаг first) предполагает отладку только одного процесса(т.е. flag|=DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS;) и перед WaitForDebugEvent неплохо бы сделать status=DBG_CONTINUE. |
|||
|
||||
| CPlusPlusFAN |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
В общем такие дела:
Программы на Java работают, но иногда. Например код:
работает и не вызывает проблем. А вот код:
выдаёт ошибку, описанную выше. Т.е. при чтении/записи что-то происходит. Трассировка показала, что на строке:
, когда она выполняется второй раз, переменная:
принимает какое-то левое значение, а переменная:
становится равной NULL. Что происходит? ЗЫ Если не выполнять:
, то эти проблемы отпадают. Это сообщение отредактировал(а) CPlusPlusFAN - 8.4.2008, 16:41 |
||||||||||||
|
|||||||||||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
прочитай, пожалуйста, что-нибудь(первое попавшееся) про union(объединение).
еще раз повторю: переменные de.u.CreateProcessInfo.* имеют смысл только в тот момент, когда de.dwDebugEventCode равен CREATE_PROCESS_DEBUG_EVENT. hint: если выложишь тестовый проект + java-прогу(на которой выходит ошибка), может кто-нибудь поможет. я наверное не смогу, т.к. сижу на чумоданах... |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |