Сообщение

Рекомендуемые действия

kInitAppMsg

Регистрируйте услуги, классы, AcEd команды и реакторы, AcRxDynamicLinker реакторы. Инициализируйте системные ресурсы приложения типа устройств и окон.

Исполните всю одноразовую раннюю инициализацию.

AcRx, AcEd, и AcGe весь активен. Сохраните значение pkt параметра, если Вы хотите разблокировать и повторно блокировать ваше приложение. Не ожидайте, что драйверы устройства будут инициализированы, любые ресурсы интерфейса пользователя быть активными, приложения, которые будут загружены в специфическом порядке, будут автошепелявить, чтобы присутствовать, или любые базы данных, чтобы быть открытыми. Запросы, возводящие в степень любое из этих предположений приведут к состоянию ошибки, иногда фатальному.

AcDb и AcGi библиотеки вообще еще не активен, хотя связано AcRx, и другие структуры на месте

KUnloadAppMsg

Исполняют заключительную системную очистку ресурса. Что-нибудь начатое или созданное в kInitAppMsg должно теперь быть остановлено или разрушено. Не ожидайте вещи быть любой отличным от описания kInitAppMsg. AutoCAD мог быть главным образом демонтирован к времени, этот запрос сделан, если бы не перечисленные библиотеки, поскольку активный в kInitAppMsg Делают описание.

KOleUnloadAppMsg

Это сообщение нужно ответить только приложениями, использующими ActiveX Автоматизацию.

Ответьте с AcRx:: kRetOK, если приложение может быть вызгружено (ни один из его объектов ActiveX или интерфейсов не упомянут другими приложениями). Если это не может быть выгружено, отвечать с AcRx:: kRetError.

KLoadDwgMsg

исполняют инициализацию, уместную текущему рисунку сеанса редактирования. AcDb, AcGi, и интерфейс пользователя API - все теперь активные.

Было ли что - нибудь сделано к рисунку, не определен.

Все Снабженные автохамом API теперь активны. Вы можете исполнять регистрацию функции AutoLISP в это время, и инициализировать интерфейс пользователя. Другие операции, чтобы исполнить теперь включают поллинг драйверы AutoCAD и запрос AcEditorReactor события, если Вы хотите самый ранний возможный доступ к acdbHostApplicationServices()->workingDatabase().

Не Делайте что - нибудь, что Вы не хотели бы случиться для каждого рисунка сеанс редактирования. Предположите, что это сообщение послано больше чем однажды в выполнение программы.

KUnloadDwgMsg

выпускают или очищают все начатое или буферизованный в ответ на код kLoadDwgMsg. Выпустите все AcDb реакторы, исключая постоянные реакторы.

Не выпустите системные ресурсы, которые не связаны к сеансу редактирования, или очищают классы AcRx, AcEd реакторы, или команды; они остаются правильными(допустимыми) поперек сеансов редактирования.

KDependencyMsg

исполняют любые действия, которые являются необходимыми для вашего приложения, когда другие приложения станут зависящий от этого, типа блокировки вашего приложения так, чтобы это не могло быть разгруженно.

KNoDependencyMsg

исполняют любые действия, которые являются необходимыми для вашего приложения, когда имеются больше не никакие другие приложения, зависящие вашего, типа разблокирования вашего приложения так, чтобы это могло быть разгруженно пользователем если желательно.

KInvkSubrMsg

вызывают функции, буферизованные с acedDefun (). Определите функцию, звоня по телефону к acedGetFuncode (). Возвращаемые значения с acedRetxxx ().

Не Делайте много здесь кроме функционального обращения.

KPreQuitMsg

разгружают любые зависимости (приложения, DLLs, и так далее) который ваше приложение управляет, чтобы гарантировать, что они являются разгруженным before your приложением.

kEndMsg

kCfgMsg

kQuitMsg

kSaveMsg

Рассмотрите использование AcEditorReactor повторных вызовов случая как альтернатива к ответу на эти сообщения. Не ответьте на эти сообщения, если вы отвечаете на эквивалентные повторные вызовы случая, сделанные через AcEditorReactor.

Последовательность событий в приложении ObjectARX

Процесс проходящих сообщений между AutoCAD и приложением ObjectARX течет почти полностью в одном направлении — от AutoCAD до приложения ObjectARX. Следующая диаграмма показывает типичной последовательности прохождения сообщения.

НЕ нашли? Не то? Что вы ищете?

Если приложение загружено, когда рисунок уже открытый, последовательно посланы сообщения kInitAppMsg и kLoadDwgMsg. Когда приложение ObjectARX разгружено, в то время как сеанс редактирования происходит - kUnloadDwg и kUnloadApp.

Осуществление Точки входа для AutoCAD

AutoCAD звонит в ObjectARX модуль через acrxEntryPoint (), который заменяет main() программы C++. Вы ответственны за осуществление acrxEntryPoint (), как описано в этом разделе.

AcrxEntryPoint () функция служит как точка входа для AutoCAD, чтобы связаться с приложением ObjectARX. ObjectARX программы может связываться с AutoCAD, возвращая коды состояния. Все запросы, чтобы вызвать функции, определенные через acedDefun() сделаны с acrxEntryPoint(). Если Вы определяете новую команду с

ObjectARX или с acedRegFunc(), AutoCAD немедленно выполняет функцию, связанную с командой (см. “ Загрузка ObjectARX Приложение ” на странице 43).

AcrxEntryPoint () функция имеет следующую сигнатуру:

extern "C"

AcRx::AppRetCode

acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt);

msg

Представляет сообщение, посланное от ObjectARX ядра К приложению.

pkt

Содержит значения данных пакета.

AppRetCode

Содержит код состояния, возвращенный AutoCAD.

В пределах определения acrxEntryPoint(), Вы записываете выключатель Операторный или подобный код, чтобы декодировать сообщения от AutoCAD, исполнить Соответствующие действия, связанные с каждым сообщением, и возвращением целочисленное состояние.

ПРЕДУПРЕЖДЕНИЕ! Использование kRetError для конечного возвращаемого значения от AcrxEntryPoint() заставит ваше приложение быть разгруженным, кроме Для сообщений kOleUnloadAppMsg и kUnloadAppMsg. В этих случаях, если KRetError возвращен, приложение не будет разгружено.

Следующий код показывает скелет допустимой инструкции выключателя:

AcRx::AppRetCode

acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)

{

switch(msg) {

case AcRx::kInitAppMsg:

break;

case AcRx::kUnloadAppMsg:

break;

...

default:

break;

}

return AcRx::kRetOK;

}

Инициализация ObjectARX Приложения

Вы должны инициализировать любые заказные классы и команды, что ваше приложение определяет. Эта инициализация может иметь место в любом AcRx::kInitAppMsg случае вашего acrxEntryPoint () или в функции, называемой от этого случая.

Инициализация приложения ObjectARX

1, если Вы определили, заказной класс, вызывает его rxInit () функция.

Определение заказных классов обсуждено подробно в главе 11, при Получении a

Заказной ObjectARX Класс. ”

2, если Вы определили заказные классы, вызывают acrxBuildClassHierarchy() для восстановления ObjectARX дерева классов во время выполнения. Для эффективности вызовите acrxBuildClassHierarchy() однажды после запроса Rxinit() для каждого из ваших заказных классов.

3 Исполняют любую другую инициализацию, в которой Вы нуждаетесь.

4 Регистрируют сервисное название{*имя*}.

Регистрация сервисного названия{*имени*} предложена, будут ли другие приложения зависеть

На ваше приложение. Регистрация сервисного названия{*имени*} позволяет другие приложения

Регистрироваться в зависимости от обслуживания{*службы*}, и позволять вашему приложению проверять{*отмечать*} если Это имеет любые зависимости перед разгрузкой. Регистрация сервисного названия{*имени*} для Ваше приложение также необходимо, если Вы собираетесь экспортировать символические функции от вашего приложения, использующего ObjectARX механизм. Вы можете использовать acrxRegisterService(), или использование AcRxService класс. Для больше Информация относительно регистрирующих услуг, см. документацию по AcRxService В ObjectARX справочниках.

5 Регистра командует с механизмом команды AutoCAD.

Используйте AcedRegCmds - > addCommand () чтобы делать AutoCAD, знающий команды

Это ваше приложение определяет. Для получения дополнительной информации, см. “ Регистрация Нового

Команды ” на странице 40.

Подготовка к Разгрузке

Когда ваше приложение разгружено, Вы должны очистить любые заказные классы или

Команды, которые ваше приложение создало. Это должно иметь место в AcRx:: kUnloadAppMsg случае вашего acrxEntryPoint () функция, или в функции Названный от того случая.

Разгрузить приложение ObjectARX

1, если Вы создали команды с acedRegCmds макрокомандой или acedDefun (), Удалите их. Обычно ObjectARX команды удалены группами, использованием AcedRegCmds - > removeGroup ().

2, если Вы создали заказные классы, удаляют их.

Используйте deleteAcRxClass () функция, чтобы удалить ваши заказные классы из AcRx дерево во время выполнения. Классы должны быть удалены, начинаясь с Полученные классы сначала, подготавливая дерево классов к родительским классам.

3 Удаляют любые объекты, добавленные приложением.

Не имеется никакого способа сообщить AutoCAD забывать относительно AcDbObject образцов это

Являются в настоящее время резидентом в базе данных. Однако, когда приложение Разгруженный, AutoCAD автоматически повернет такие объекты в образцы AcDbProxyObject или AcDbProxyEntity.

4 Удаляют любые реакторы, которые были приложены к любому AcDbObject, AcDbDatabase, AcRxDynamicLinker, или объект{*цель*} AcEditor. (Постоянные реакторы На AcDbObjects - исключение; они станут полномочными объектами, когда Приложение разгружено.)

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132