| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > [.Net] Проблемы загрузки arx приложений

[.Net] Проблемы загрузки arx приложений

Ответ
Поиск в этой теме
Непрочитано 05.07.2012, 13:12 #1
[.Net] Проблемы загрузки arx приложений
Modis
 
Липецк, Москва
Регистрация: 12.06.2010
Сообщений: 534

Всем привет.
Сделал загрузчик arx приложений и поместил его в Initialize() - чтобы нужные приложения грузились автоматически вместе с акадом.
Сам вариант загрузки взял у Андрея hwd:
Код:
[Выделить все]
 foreach (string file in Directory.GetFiles(path, "*.arx", sopt))
                            {
                                try
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "loadFile") + file);
                                    ((AcadApplication)acad.AcadApplication).LoadArx(file);
                                }
                                catch (System.Exception ex)
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "fileErr") +
                                        file + MpLang.CurLangItem("MpLoader", "errMore") + ex.Message);
                                }
                            }
В принципе это работает, однако не всегда
Сделал проверку на двух приложениях Ривилиса - ExplodeProxy и GeomProps - они не грузятся и это тормозит загрузку моей dll
В командную строку выдает следующее:
Цитата:
Загрузка файла: F:\2011х86\2011х86\ExplodeProxy2010x32.arx
Ошибка загрузки файла: F:\2011х86\2011х86\ExplodeProxy2010x32.arx. Подробнее:
Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу
"Autodesk.AutoCAD.Interop.AcadApplication". Операция завершилась со сбоем,
поскольку вызов QueryInterface COM-компонента для интерфейса с IID
"{8F17437C-2EFB-4FC4-8188-EEFA50FE7147}" возвратил следующую ошибку: Интерфейс
не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
Загрузка файла: F:\2011х86\2011х86\GeomProps2010x32.arx
Ошибка загрузки файла: F:\2011х86\2011х86\GeomProps2010x32.arx. Подробнее:
Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу
"Autodesk.AutoCAD.Interop.AcadApplication". Операция завершилась со сбоем,
поскольку вызов QueryInterface COM-компонента для интерфейса с IID
"{8F17437C-2EFB-4FC4-8188-EEFA50FE7147}" возвратил следующую ошибку: Интерфейс
не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).
Вопрос - что делать?
Просмотров: 5748
 
Непрочитано 05.07.2012, 13:54
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


То, что ты выше привёл, совпадает с моим кодом только строчкой:
Код:
[Выделить все]
((AcadApplication)acad.AcadApplication).LoadArx(file);
Интереса ради написал простой пример, в котором успешно загрузил указанные тобой библиотеки: ExplodeProxy и GeomProps. Никаких проблем не возникло. AutoCAD 2009 x86 SP3 Enu.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 05.07.2012, 14:26
#3
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


На всякий случай более полный код:
Код:
[Выделить все]
 public static void LoadApps(bool lsp, bool dll, bool arx, List<string> dirs, bool sortAll)
        {
            try
            {
                if (dirs.Count == 0) return;
                Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;

                SearchOption sopt = SearchOption.AllDirectories;
                if (!sortAll) sopt = SearchOption.TopDirectoryOnly;
                ed.WriteMessage("\n============================================");
                ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "loaderMsg"));
                foreach (string path in dirs)
                {
                    if (Directory.Exists(path))
                    {
                        #region lsp
                        if (lsp)
                            foreach (string file in Directory.GetFiles(path, "*.lsp", sopt))
                            {
                                try
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "loadFile") + file);
                                    ads_queueexpr(string.Format("(load \"{0}\" \"\")\n", file.Replace("\\", "\\\\")));
                                }
                                catch (System.Exception ex)
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "fileErr") +
                                        file + MpLang.CurLangItem("MpLoader", "errMore") + ex.Message);
                                }
                            }
                        foreach (string file in Directory.GetFiles(path, "*.fas", sopt))
                        {
                            try
                            {
                                ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "loadFile") + file);
                                ads_queueexpr(string.Format("(load \"{0}\" \"\")\n", file.Replace("\\", "\\\\")));
                            }
                            catch (System.Exception ex)
                            {
                                ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "fileErr") +
                                    file + MpLang.CurLangItem("MpLoader", "errMore") + ex.Message);
                            }
                        }
                        #endregion
                        #region dll
                        if (dll)
                            foreach (string file in Directory.GetFiles(path, "*.dll", sopt))
                            {
                                try
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "loadFile") + file);
                                    System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom(file);
                                }
                                catch (System.Exception ex)
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "fileErr") +
                                        file + MpLang.CurLangItem("MpLoader", "errMore") + ex.Message);
                                }
                            }
                        #endregion
                        #region arx
                        if (arx)
                            foreach (string file in Directory.GetFiles(path, "*.arx", sopt))
                            {
                                try
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "loadFile") + file);
                                    ((AcadApplication)acad.AcadApplication).LoadArx(file);
                                }
                                catch (System.Exception ex)
                                {
                                    ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "fileErr") +
                                        file + MpLang.CurLangItem("MpLoader", "errMore") + ex.Message);
                                }
                            }
                        #endregion
                    }
                    else
                        ed.WriteMessage("\n" + MpLang.CurLangItem("MpLoader", "noDir") + path);
                }
                ed.WriteMessage("\n============================================");
            }
            catch (System.Exception ex)
            { MessageBox.Show(ex.Message, MpLang.CurLangItem("Application", "ErrorTitle")); }
        }
Modis вне форума  
 
Непрочитано 05.07.2012, 14:47
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Замени строку кода
Код:
[Выделить все]
((AcadApplication)acad.AcadApplication).LoadArx(file);
На это:

Код:
[Выделить все]
Autodesk.AutoCAD.Interop.AcadApplication acApp = acad.AcadApplication as Autodesk.AutoCAD.Interop.AcadApplication;
System.Diagnostics.Debug.Assert(null != acApp, "null != acApp");
if (null == acApp)
	ed.WriteMessage("\nНе удалось привести объект приложения к типу AcadApplication!");
else
	acApp.LoadArx(file);
Посмотри, что получится.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 05.07.2012 в 15:12.
hwd вне форума  
 
Автор темы   Непрочитано 05.07.2012, 15:19
#5
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Все, проблему нашел! Всему виной оказалась моя невнимательность
Когда я добавлял ссылку на библиотеку типов, то для сборки 2010 и 2011 акада добавил ссылку на 2009 акад, не посмотрев на номер версии в имени файла (наивно предположил, что подключить библиотеку с именем AutoCad 2012 Type Library будет неверным)

Огромное спасибо Андрею за терпение и потраченное на меня время!!!

UPD
К сожалению проблема не разрешилась
У меня на компе стоят автокады - 2009-2013. В папке C:\Program Files\Common Files\Autodesk Shared находится два файла acax18enu.tlb и acax18rus.tlb.
Так вот - автокад 2010 является версией 18.0, автокад 2011 - 18.1, а автокад 2012 - 18.2.
Т.к. у меня стоят все эти автокады, то библиотека типов AutoCad Type Library заменяется на последнюю - 18.2 и добавить ссылку для сборки я могу только на этот файл.
Но, когда сборка загружается в автокад 2011 на компе в котором нет автокада 2012, то вылетает ошибка:
Цитата:
System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "Autodesk.AutoCAD.Interop, Version=18.2.0.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "Autodesk.AutoCAD.Interop, Version=18.2.0.0, Culture=neutral, PublicKeyToken=eed84259d7cbf30b"
Следовательно и сборка для 2010 автокада не будет работать, если нет 2012
Подскажите, как быть?
Миниатюры
Нажмите на изображение для увеличения
Название: TLBproblem.png
Просмотров: 1543
Размер:	70.7 Кб
ID:	83375  

Последний раз редактировалось Modis, 06.07.2012 в 12:10. Причина: Проблема не решилась!
Modis вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > [.Net] Проблемы загрузки arx приложений

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освоение тел Солнечной системы: Техника, технологии, ресурсы. Солидворкер Разное 3697 сегодня 08:18