Оперативное изменение поведения модуля (AutoCADа). Т.е. если исходник изменится, то он перекомпилируется и выполнится новая его версия.Ты уверен, что выполнилась именно новая версия? Я совершенно нет.
Т.е. если исходник изменится, то он перекомпилируется и выполнится новая его версия.Напоминает игру в бадминтон в кукурузе (https://www.youtube.com/watch?v=X_0B4MfRD4o). "Новая версия", говоришь... Но у тебя в рамках этой сессии в твой AppDomain уже загружена предыдущая версия твоей сборки. Это если бы в AutoCAD можно было бы использовать несколько AppDomain вместо одного общего - тогда да, а так то, что ты пытаешься прикрутить - достаточно сомнительная "конструкция" (имхо).
Выполняется последняя загруженная версия.Многое зависит от простоты кода. Если в этом коде ты подписываешься на какие-то AutoCAD'овские события, то это верный путь к аварийному завершению AutoCAD.
1. Начни с того, что отформатируй код по правилам форума (смотри у меня в подписи).1.сейчас...
2. Это касается только команды _ATTSYNC или каких-то еще?
3. Почему вместо ed.Command не воспользоваться Document.SendStringToExecute? Синхронности ты всё-равно не добьешься.
Вообще запуск команды из обработчика события - это "жуткая жуть".
3.собственно синхронность то и нужна и вроде как пишут, что можно этого добиться.Очень сильно сомневаюсь. Для синхронности я бы организовал в коде команду (модальную), которую запускал бы из обработчика при помощи Document.SendStringToExecute, а внутри этой команды попробовал запускать команды уже синхронно.
Многое зависит от простоты кода. Если в этом коде ты подписываешься на какие-то AutoCAD'овские события, то это верный путь к аварийному завершению AutoCAD.События не трогаю, по крайней мере пока. В коде делаю модификацию вхождений блоков. И это всё работало нормально, до тех пор пока не потребовалось вызывать команды в 2016ом.
И это всё работало нормально, до тех пор пока не потребовалось вызывать команды в 2016ом.А в 2015-ом? А наличие установленного ServicePack для 2016?
А в 2015-ом?У нас только 2016й и 2014й (там через acedCmd работает)
А наличие установленного ServicePack для 2016?Конкретно сейчас проверяю на AutoCAD 2016 MEP SP1
А acedCmdS вместо acedCmd в 2016?Ээээ... уже запутался... кажется это кончилось тем, что я не нашёл её определение, чтобы его DllImport... Хотя нет, вот же в документации ARX... сейчас попробую (возможно ещё раз)
До последней строки (где log()) не доходит, исключений нет, тишина просто
Тут я не понял. Если не доходит, то может ждёт чего-то от пользователя. Установи CMDECHO в 1 чтобы в командной строке что-нибудь печаталось.Всё доходит. Я просто новый файлик с исходником из студии не закинул туда где AutoCAD ждёт...
P.P.S. Не факт, что размер bool == 1 (ибо определяется реализацией), у MS, да == 1. Ну и + там всегда false. Честно говоря, я думал компилятор сам разберётся.Как раз нет. Почитай тему: http://adn-cis.org/forum/index.php?topic=1719.0 Там как раз ошибка вылезла именно из-за того, что использовался (по-умолчанию) UnmanagedType.Bool вместо UnmanagedType.I1.
Я бы вместо условной компиляции написал бы P/Invoke трех функций и вызвал бы нужную в зависимости от версии AutoCAD (Application.Version). Но это на любителя...Если не секрет - в чем причина предпочтений, если только не из желания загружать одну и ту же сборку в разные версии.
Если не секрет - в чем причина предпочтений, если только не из желания загружать одну и ту же сборку в разные версии.Это представь себе сколько конфигураций (и соотвественно количество сборок) нужно иметь для:
Я бы вместо условной компиляции написал бы P/Invoke трех функций и вызвал бы нужную в зависимости от версии AutoCAD (Application.Version)Хорошая идея! Я замучался уже делать сборки под разные версии начиная с 2009й и по 2016ю. Я до недавнего времени думал, что если импортированной функции нет по факту, то программа просто не запустится...
А это значит, что крах неизбеженИзначальная идея была, чтобы можно было оперативно менять только то, что часто меняется (особенно вначале внедрения чего-то нового), т.к. просто подменить dll-ку теперь нельзя (как раньше FreeLibrary), нужно перезапускать AutoCAD (или ещё что-то). Возиться с AppDoamin + IPC тоже не хочется из-за этого почему-то.
Ещё бы вот здесь как-то избежать условной компиляции:Сомневаюсь, что это возможно. Во всяком случае не видел готовой реализации. Но уменьшить количество конфигураций явно можно (до 2012 включительно и после).
Отписаться от старого события уже не можемПлохо.
Получаем отработку двух версий одного события.Очень плохо. Ведь мы этого не ожидали.