![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Аленка |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Всем привет!
У меня два вопроса В родительском процессе делаю:
Создаю дочерний поток, в него через командную строку передаю дескриптор hFile :
Вопрос 1: Нужно ли передавать дескриптор объекта FileMapping? или в дочернем процессе объект FileMapping нужно создавать заново? Вопрос 2: Можно ли как-то попасть в отладку дочернего процесса во время выполнения родительского? |
||||
|
|||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Опытным путем выявлено
Вопрос
остается... |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Наверное имеются ввиду именованые участки. Создавай в родительском процессе именованый участок памяти(буду приводить примеры на ассемблере, но суть ясна):
invoke CreateFileMapping, hFile, NULL, PAGE_READWRITE, 0, 07FFFFFh, $CT0("hunger.ru") invoke MapViewOfFile, eax, FILE_MAP_WRITE + FILE_MAP_READ, 0, 0, 0 В дочернем открывай этот участок по имени: invoke OpenFileMapping, FILE_MAP_WRITE+FILE_MAP_READ, FALSE, $CT0("hunger.ru") invoke MapViewOfFile, eax, FILE_MAP_WRITE + FILE_MAP_READ, 0, 0, 0
Каким образом он отлаживается и что значит попасть? Это сообщение отредактировал(а) W4FhLF - 20.12.2006, 14:45 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Ой, спасибо!
Я бы поставила плюсик, но у меня прав не хватает... OpenFileMapping() по имени в дочернем процессе- это намного проще, чем я пыталась делать. Не надо передавать дескриптор hFile(он нужен для создания FileMapping), и не нужно создавать новый FileMapping...Я догадывалась что все проще А попасть в отладку- это значит, мне нужно перейти в студии(Microsoft Visual Studio) на пошаговую отладку процесса(вверху он назван как process2), который я запускаю из родительского процесса функцией CreateProcess(). Это мое приложение, я могу его открыть в той же студии, запустить, но мне нужно попасть в него после вызова и посмотреть его некоторые переменные. |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Ну можешь создать процесс с флагом CREATE_SUSPENDED, насильно прицепиться к нему и продолжить его выполнение функцией ResumeThread. Может быть есть и встроенные средства для этого, я увы не знаю, ибо встроенными средствами отладки не пользуюсь.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Что-то не представляю, как это- прицепиться к SUSPENDED процессу?
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Как отлаживаешь DLL, так отлаживай и дочерний процесс. Командную строку установи на родительский процесс, только учти, путь до файла дочернего процесса должен быть таким же, как и путь до компилируемого в студии, иначе дебагер просто не схватит создание процесса.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Ниче не поняла...
В DLL- проекте я устанавливаю debug- версию, и по f11 туда можно зайти, когда по шагам отлаживаешь проект, который использует эту dll. В дочерний процесс я не могу ТАК зайти... Еще хотела добавить по поводу передачи дескрипторов в командной строке. Вообщем, как я поняла, можно делать дочерний процесс наследующим все разрешенные к наследованию дескрипторы, и передавать интересующие через командную строку или еще как, для использования, тк дочерние процессы не имеют прямого доступа к наследуемым дескрипторам. Или, если дескрипторы не наследуются, то можно пользоваться именем, которое задается функцией CreateFileMapping() в родительском процессе. Его тоже можно передать в командной строке. НО! В одной книжке я прочитала что наследование все же предпочтительней. Т.к. возможны проблемы с уникальностью имен. Даже если другое приложение не создаст такого же имени, то проблемы будут при одновременной работе двух экземпляров приложения. Да и время на поиск имени затрачивается... Вообщем, сначала я делала как правильно, а потом как удобнее |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Я даже знаю, что это была за книжка, Джеффри Рихтер "Windows для профессионалов"
Ну тогда ты невнимательно читала:
Время на поиск имени затрачивается может и больше, но на общем фоне ты это едва ли заметишь. К тому же, передача хэндлов через командную строку тоже не самый лучший в плане оптимизации вариант, для этого и были придуманы именованые объекты. Это сообщение отредактировал(а) W4FhLF - 26.12.2006, 14:51 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
Хм... у тебя ведь есть эта книжка в электронном виде?
Я ее не нашла ни в каком...Поэтому у меня другая И там тоже есть про программы, которые генерят это GUID. Но я решила что в учебном проекте правильней будет все же не заморачиваться на эти программы |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Есть в электронном, есть в бумажном...
Побегайло... дал же Бог фамилию, не слышал об этом авторе. Послушай, не заморачивайся ты так на имени объекта, назови его MyEducationalApplication и я тебе обещаю, в системе не будет объектов, которые имеют такое же имя -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
офф:Поделись где книгу качал?
Обещаешь, говоришь? Хотя у меня задание не на проверку такой работы. И то что нужно я уже сделала... |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
офф: http://alexsoft.home.nov.ru/prog/index.htm
Чтобы контролировать кол-во запущенных приложений можешь использовать семафоры. В зависимости от числа свободных ресурсов в семафоре можно при соединять к имени создаваего объекта циферку, типа Object1 Object2 и т.д. Ну да ладно, разобрались -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
W4FhLF, спасибо большое за книжку! Супер! И формат удобный...
|
|||
|
||||
![]()
|
| Правила форума "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. |