Тема: Совместимость с .NET

Кто-нибудь пробовал писать под автокад на .NET с использованием ObjectARX? Во-первых, при наследовании класса от ObjectARX-класса, требуется mfc42.lib. Во-вторых, возникает куча ошибок и предупреждений (от предупреждений пока не избавиться). Возможно-ли подцепить (создать эквивалент) ObjectARX Add-Inn?

Re: Совместимость с .NET

Пробовал. Не получилось. ObjectARX Add-In сделан, конкретно для MSVS6, с .NET работать не желает, даже если его принудительно заставить, выдает ошибку (там разные экспортные ф-ции).

Re: Совместимость с .NET

В последнее время пишу ObjectARX-приложения исключительно в Visual C++ 7.0 (если это имеется в виду под .NET). Как для Автокада 2000-2002, так и для Автокада R14. При этом действительно возникает ряд неудобств, от ряда вещей приходится отказываться. В частности:

- Отказался от использования MFC. Наверное, теоретически MFC можно прицепить и в этом случае, но требуемые для этого усилия превосходят мои потребности в этой библиотеке. ObjectARX 2000 действительно требует при компоновке mfc42.lib. Решил проблему, просто прилинковав соответствующий файл из дистрибутива VC++ 6.0.

- Самая, наверно, неудобная вещь: VC++ 7.0 не хочет производить отладку файлов, созданных в ObjectARX 2000, просто не находит в загружаемом ARX отладочной информации. Видимо, это вызвано различиями в коде инициализации RTL для VC6 и для VC7 (функция DllMain берется в RxApi.lib и ожидает RTL шестой версии). Для меня это не так страшно, поскольку у меня приложения должны работать также и в AutoCAD R14, там все отлаживается и трассируется без всяких проблем.

- Никакой Add-in из VC6 работать действительно не будет. Но я не ощущаю в нем потребности. Сделал один раз шаблон-заготовку файла проекта для ObjectARX (он имеет формат XML). При создании нового ARX переношу из шаблона в новый файл проекта раздел <Configurations>. После этого в тексте файла остается только везде подставить название нового проекта вместо старого.

- Ряд предупреждений компоновщика убирается игнорированием стандартной библиотеки msvcrt.lib (Linker -> Input -> Ignore Specific Library). Не удается избавиться только от нескольких предупреждений при компоновке отладочной версии проекта в ObiectARX 2000.

- Возникает тонкость с освобождением памяти, размещенной в Автокадовской куче, а именно: не следует вызывать в таких случаях стандартную функцию free(), надо вызывать явно acad_free().

- Осторожнее надо быть с глобальными переменными, особенно использующими в конструкторе и деструкторе динамическую память. Скажем, невинная строка

const CString str = "abcdef";

будучи размещенной на глобальном уровне, вызовет Access Violation при выгрузке ARX.

Наверное, есть еще тонкие моменты, но в целом ничто не мешает успешно создавать ARX-приложения в Visual C++ .NET.

Re: Совместимость с .NET

Обалдеть!
Михаил, огромное пасибо за ответ (он более чем содержательный)! По всей видимости Ваш опыт в программировании значительно богаче моего. Всегда приятно получать ответ от более осведомлённого человека.
На .NETя вынужден перейти из-за очень корявой intellisence VC6.0. Мне легче отказаться от поддержки Autodesk в плане визардов, чем каждый раз при вызове функции залезать в справку по ObjectARX ...
Вообще хотелось бы в будущем подзаточить Автокад, потому как не очень понятно чем иногда так долго занят P-IV c 1GB оперативки.