Тема: Вызов команды (функции) из программы.

В моей библиотеке реализована некая команда. (Осуществляет обращение к БД рисунка, считывает и записывает атрибуты блоков). Команда создавалась с помощью мастера (панель
OARX в VS.net). При вызове этой команды вручную все работает. Но мне нужно чтобы она сама вызывалась через какое-то время .После я сделал из нее просто  функцию класса. Зарегистрировал таймер, и при обращении к этой команде (функции), из функции таймера,при выполнении например if ( (es=pEnt->upgradeOpen ()) == Acad::eOk ), получаю es=320(eLockViolation). Почему? Если я возращаю этой команде статус команды, то при вызове
команды с командной строки все работает, а через некоторое время эту команду пытается самостоятельно вызвать функция таймера и опять eLockViolation. То есть получается руками
можно, а программно нельзя?
Пытался написать в начале команды acDocManager->lockDocument(pDoc); в конце     acDocManager->unlockDocument(pDoc); Не помагает. Вообще появляется фатальная ошибка.
(AcApDocument* pDoc; Может как-то указать чтобы pDoc ссылался именно на мой документ, или  просто оставить без инициализации).
Объясните новичку чем отличается вызов команды "руками" от программного?
Спасибо.

Re: Вызов команды (функции) из программы.

> @serega@
Безусловно pDoc должно ссылаться именно на документ, который ты собираешься модифицировать.
pDoc = acDocManager->mdiActiveDocument();
Но это должно быть сделано при запуске команды, а не по таймеру. Одному Богу известно какой документ станет активным в момент, когда таймер отработает.

Re: Вызов команды (функции) из программы.

Спасибо Вам большое...все получилось!!!

Re: Вызов команды (функции) из программы.

> @serega@
Очень рад был Вам помочь. smile Попутное замечание. Поместите Ваш код в критическую секцию, или как-то иначе синхронизуйте его. Иначе Вы можете попасть в ситуацию, когда обработка чертежа еще не закончена, а пришло уже новое прерывание от таймера. Конечно, если в функции обработки таймера Вы его сразу не убиваете.