В последнее время пишу 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.