ADN Club > ObjectARX
Перевод приложения на AutoCAD 2015, или – исключение при редактировании CUI
Дмитрий Гилин:
Здравствуйте, коллеги!
По работе возникла необходимость адаптировать приложение под AutoCAD 2015.
Если коротко – после выполнения всех рекомендаций, приложение успешно загружается и работает. Но, при попытке вызвать редактор CUI, происходит исключение:
System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: stream
в System.Resources.ResourceSet..ctor(Stream stream)
в Autodesk.AutoCAD.Customization.MyResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
в System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
в Autodesk.AutoCAD.Customization.CustomizationSection.FillPropertyBag(IPropertyBag bag)
в Autodesk.AutoCAD.Customization.PropertyControl.SetCustomizationSectionProperties(CustomizationSection cs, CUITreeNode node)
в Autodesk.AutoCAD.Customization.MainForm.handleTreeNodeItemSelected(Boolean recreateToolbarPreview)
в Autodesk.AutoCAD.Customization.MainForm.tabControl_SelectedIndexChanged(Object sender, EventArgs e)/
в System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs e)
в System.Windows.Forms.TabControl.WmSelChange()
в System.Windows.Forms.TabControl.set_SelectedIndex(Int32 value)
в Autodesk.AutoCAD.Customization.MainForm.OnLoad(EventArgs e)
в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
в System.Windows.Forms.Control.CreateControl()
в System.Windows.Forms.Control.WmShowWindow(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Теперь подробнее.
Приложение существует уже долгие годы, и мне не в первый раз приходится переводить его на очередную версию AutoCAd’а.
Приложение состоит из нескольких частей.
ARX-часть написана на Unmanaged C++ & ObjectARX, через COM-интерфейс она связана с .Net-частью, реализующей пользовательский интерфейс на WinForms. Исторически, .Net-часть реализована на MS Framework 3.5.
Судя по исключению, ошибка происходит при чтении ресурсов при загрузке формы редактора. Возможно проблема с тем, что не совпадают культуры AutoCAD и Windows. У меня установлен AutoCAD 2015 SP1, English. Windows 7 Корпоративная, Русская.
Я попытался найти информацию об ошибке в интернете.
Вот здесь, автор neyton_ (примерно в середине страницы) описывает очень похожую ошибку - Bug after CUI command - http://forums.autodesk.com/t5/autocad-civil-3d-general/c3d-2015-list-of-current-bugs-issues/td-p/5012764/page/7 , но информации об исправлении нет.
В конфигурационном файле acad.exe.config пробовал в различных комбинациях такие атрибуты как <supportedRuntime>, <generatePublisherEvidence>, <loadFromRemoteSources>, <legacyUnhandledExceptionPolicy>, не помогает.
Пробовал отключать функциональность приложения, реагирующую на события AutoCAD, да и просто большие куски кода, которые предположительно могли повлиять – не помогло.
Рассматривал вариант увеличения версии Framework нашей .Net-части с версии 3.5 до 4.0, но это довольно большой объем работы, по-быстрому не получилось.
Александр Ривилис:
Надеюсь, что в .NET части нет обращения к AutoCAD никоим образом - ни AutoCAD .NET API, ни ActiveX/COM, ни AutoCAD .NET API
Дмитрий Гилин:
Александр,
в .Net-части обращений к Autocad нет.
P.S. впервые встречаю столь серьезную защиту от роботов при публикации сообщений ;)
Александр Ривилис:
--- Цитата: Дмитрий Гилин от 27-08-2014, 16:35:44 ---Александр,
в .Net-части обращений к Autocad нет.
P.S. впервые встречаю столь серьезную защиту от роботов при публикации сообщений ;)
--- Конец цитаты ---
1. Забыл поприветствовать на форуме - исправляюсь. :)
2. Про ботов-роботов - это правда. У нас нет ни времени, ни желания с ними бороться, а прецеденты уже были. Но это только первые два (или три) сообщения - потом вопросов не будет.
3. Боюсь что здесь проблема не из-за версии AutoCAD. Если бы причина была в этом, то и в 2014-ом, который использует .NET 4.0 она бы проявлялась. Скорее причина в том, что начиная с AutoCAD 2015 используется FIBERLESS-среда.
4. Боюсь что помочь так не получится - с такой технологией я не сталкивался. Да и вряд ли кто-то из ребят такое использовал.
Предположений может быть масса - вплоть до того, что какие-то ресурсы не переключаются/не закрываются. Или действительно переключается язык, а AutoCAD в 2015 обратно не переключает. Так что возможно это тебе нужно делать самому.
5. Что еще я могу порекомендовать? Нужно сделать с нуля отдельный минимальный пример native arx и .NET COM и проверить с ними. Если будет та же ошибка с CUI - отправим в ADN DevHelp.
Дмитрий Гилин:
Александр, спасибо за ответ.
Может подскажете где почитать про FIBERLESS и как это отражается на программирование под AutoCAD2015?
'...сделать с нуля отдельный минимальный пример' - непростая задачка, буду думать.
Навигация
Перейти к полной версии