У меня похожее приложение, работает для автокада с 2006 по 2013 (и х86 и х64) и для bricscad v12-v13.
Чтобы решить эту проблему, я сделал проект визуальной студии для каждой архитектуры, каждый из этих проектов ссылается на разные .dll в зависимости от версии AutoCAD. В частности, каждый из этих проектов относится к AcDbMgd.dll, AcMgd.dll, Autodesk.AutoCAD.Interop and Autodesk.AutoCAD.Interop.Common
, эти dll специфичны для каждой архитектуры AutoCAD.
Вы должны обратить внимание, что все упомянутые dll находятся в локальной копии FALSE!
В моем случае все проекты скомпилированы в разных папках, но это не обязательно, если вы назначаете для каждого проекта свое имя сборки.
Благодаря тому, что AutoCAD API с 2006 по 2012 год одинаковый (2013 год имеет некоторые отличия), исходный код отделен от этих проектов, каждый проект включает его в виде связанного исходного файла (перейдите к проекту в обозревателе решений -> щелкните правой кнопкой мыши -> добавить существующий элемент -> выберите исходный файл и нажмите «добавить как ссылку»). Таким образом, у вас будет один и тот же исходный код для всех проектов, но они скомпилированы с использованием разных DLL-файлов Autocad.
В моем случае также были некоторые проблемы, потому что BricsCAD иногда имеет другой API по сравнению с AutoCAD. Чтобы решить эти несколько случаев, я установил символ условной компиляции и использовал его так:
#if BricsCad
CADAPI.ApplicationServices.Application.SystemVariableChanged += new CADAPI.ApplicationServices.SystemVariableChangedEventHandler(Application_SystemVariableChanged);
#else
CADDB.LayoutManager.Current.LayoutSwitched += new CADDB.LayoutEventHandler(Current_LayoutSwitched);
#endif
Скажите мне, если вам нужна дополнительная информация. Кстати, я думаю, что ваша главная проблема заключается в том, что локальная копия = true для AutoCAD Dll.
person
Tobia Zambon
schedule
22.11.2012