Добрый вечер!
Подскажите, пожалуйста, во-первых, в чём разница между методами GetInterfaceObject и CreateObject, а во-вторых, в каком случае лучше использовать каждый из методов.
В Help единственное примечание о методе GetInterfaceObject: "Although the object will be loaded into AutoCAD, it will not show up in its type library. The object will have its own type library. This method lets you connect to an ActiveX Automation server."
Пробовал в AutoCAD 2008 на VBA создать объект класса "Excel.Application" используя оба метода:
1) Dim obj As Object
Set obj = Application.GetInterfaceObject("Excel.Application")
2) Dim obj As Object
Set obj = CreateObject("Excel.Application")
В первом случае получил ошибку: "Run-time error '-2147221164(80040154)'". Чем может быть вызвана ошибка?
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Добрый день.
Подскажите, пожалуйста, в чем может быть проблема.
Запускал АвтоКАД как COM-объект из-под VBA (форма MS Access), открывал чертеж, делал в нем выборку, брал нужную информацию и закрывал. Это работало.
Теперь тот же код переношу на VB.net, и работает все, кроме выборки по свойствам.
Выбрать все объекты при этом можно, но когда передаю параметры FilterData и FilterType, метод Select ругается, мол, неверный тип данных для FilterType.
Может быть, в VBA и в dotNet по-разному представляются массивы? Как тогда это можно обойти?
jimjam написано:
Теперь тот же код переношу на VB.net, и работает все, кроме выборки по свойствам.Выбрать все объекты при этом можно, но когда передаю параметры FilterData и FilterType, метод Select ругается, мол, неверный тип данных для FilterType.
Может быть, в VBA и в dotNet по-разному представляются массивы? Как тогда это можно обойти?
В VB.NET тип FilterType должен быть не Integer, как в VBA, а Short (или Int16)
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Спасибо! А то уж пришлось передавать лисповую команду выбора объектов и брать текущую выборку... Тоже, конечно, вариант, но некрасиво как-то 🙂
День добрый!
Скажите пожалуйста, существут ли подробная справочная документация по COM-овским объектам с описанием всех классов, их методов, свойств и событий, доступных в следующих пространствах имён: Autodesk.Autocad.Interop, Autodesk.Autocad.Interop.Common?
Spyrite написано:
Скажите пожалуйста, существут ли подробная справочная документация по COM-овским объектам с описанием всех классов, их методов, свойств и событий, доступных в следующих пространствах имён: Autodesk.Autocad.Interop, Autodesk.Autocad.Interop.Common?
Да. Существует. Называется она AutoCAD ActiveX and VBA Reference и находится (при инсталлированном AutoCAD) обычно здесь: %SystemDrive%\Program Files\Common Files\Autodesk Shared\acadauto.chm
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Здравствуйте.
Возникла необходимость разработать внешнее приложения для работы с Acad 2012. Вернее не с Acad 2012, а с его dwg-файлами, т.е. для работы приложения нет необходимости запускать автокад.
Ниже мой код:
Public Sub OpenDrawing()
Dim strFileName As String = "D:\2012\Съемка.dwg"
Dim appAcad As New Autodesk.AutoCAD.Interop.AcadApplication
Dim strProgId As String = "AutoCAD.Application.18"
Код ниже работает, открывает автокад, но мне он не нужен!
ВОПРОС: Можно-ли обойтись без кода приведенного ниже, т.е. не запускать акад?
On Error Resume Next
'' Получить запущенный экземпляр AutoCAD
appAcad = GetObject(, strProgId)
'' Если нет ни одного запущенного приложения AutoCAD, получаем ошибку.
If Err.Number > 0 Then
Err.Clear()
'' создаём новый экземпляр приложения AutoCAD
appAcad = CreateObject("AutoCAD.Application.18")
'' Проверяем, что экземпляр приложения AutoCAD был создан
If Err.Number > 0 Then
Err.Clear()
'' Если экземпляр приложения AutoCAD не был создан, сообщаем об этом вы завершаем работу
MsgBox("Экземпляр приложения 'AutoCAD.Application' не был создан.")
Exit Sub
End If
End If
Если перейти сразу к коду, приведенному ниже, то возникает исключение в строке appAcad.Documents.Open(strFileName):
Вызов был отклонен. (Исключение из HRESULT: 0x80010001 (RPC_E_CALL_REJECTED))
If (File.Exists(strFileName)) Then
appAcad.Documents.Open(strFileName)
MsgBox("Файл " & strFileName & " открыт.")
Else
MsgBox("Файла " & strFileName & " не существует.")
Exit Sub
End If
Я понимаю, что я что-то делаю не так, но что не знаю.
Помогите пожалуйста.
P.S. Windows 7x64, VS2010, Visual Basic.net
Ты создаешь новый объект AutoCAD или используешь существующий.
Тебе необходимо воспользоваться другими технологиями, например ObjectDBX...
ИМХО в данном случае это не важно. Открыть dwg можно либо через AutoCAD, либо через библиотеки ODA (опять же, ИМХО). Так что AutoCAD запускать придется.
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Плохо, что в сети мало примеров с использованием именно внешних ехе-приложений для работы с AutoCad. В основном для dll.
И все равно, даже если запускать AutoCad, возникают ошибки: постоянно отрубается от COM при создании, то во время выполнения, то сам AutoCad выдает фаталЕррор.
Если есть рабочий код для запуска AutoCad из внешнего проложения буду признателен. А то тот код, что я приводил работает через раз.
Я вот думаю, что проще будет сохранить файл в DXF и оттуда выдергивать нужные мне данные. Тогда точно AutoCad не нужен будет.
Но все равно, для будущего пригодиться и чтение DWG. Пока для моей текущей задачи нет необходимости что-то менять в файле.
Понимаю, что ответ может быть несвоевременный, все-таки год прошел с вашего вопроса. Но я тут бываю нечасто 🙂
Что касается вашего вопроса, то технология COM вам тут не помощник, т.к. ее суть как раз в том, чтобы обращаться к работающему процессу AutoCAD. И таки да, этот путь нестабильный, тормозной и не очень удобный.
То, что вам нужно (по крайней мере, как я это понимаю), называется RealDWG и распространяется вместе с AutoCAD. Посмотрите внутри папки с Автокадом, там внутри папки bin должна быть папка с именем RealDWG. В ней — набор dll-библиотек, используя которые можно работать с DWG-файлами без AutoCAD (не берусь судить, насколько корректно работать с этими библиотеками на компьютере без установленного AutoCAD с лицензионной точки зрения, но чисто технически работать будет).
Чтобы использовать эти библиотеки нужно созать dotNET-проект и подключить к нему файлы acmgd.dll и/или acdbmgd.dll, после чего читать документацию по разделу ObjectARX for AutoCAD : Managed Class Reference.
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Может оно и спорное, но основанное на собственном опыте.
По поводу нестабильности — есть ситуация, в которой COM стабильно "нестабилен": после восстановления компьютера из режима гибернации все COM-объекты рушатся, и приложение нужно перезапускать. И это лишь один из примеров.
По поводу тормознутости-то, надеюсь, возражений нет? 🙂 Писал как-то приложение, последовательно открывающее чертежи, читающее информацию из одного блока и закрывающее чертеж. Сначала делал на COM, потом перевел на RealDWG — быстродействие выросло примерно в десять раз! Опять-таки, COM-ом не удавалось открыть чертежи, созданные не в среде AutoCAD. Благо, таких было немного, но COM их не обрабатывает принципиально! Можно ли такой подход считать стабильным или удобным? Каждый решает для себя сам.
Все сказанное мной, расценивать как "ИМХО" 😃
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
@jimjam wrote:
...То, что вам нужно (по крайней мере, как я это понимаю), называется RealDWG и распространяется вместе с AutoCAD. Посмотрите внутри папки с Автокадом, там внутри папки bin должна быть папка с именем RealDWG. В ней — набор dll-библиотек, используя которые можно работать с DWG-файлами без AutoCAD (не берусь судить, насколько корректно работать с этими библиотеками на компьютере без установленного AutoCAD с лицензионной точки зрения, но чисто технически работать будет).Чтобы использовать эти библиотеки нужно созать dotNET-проект и подключить к нему файлы acmgd.dll и/или acdbmgd.dll, после чего читать документацию по разделу ObjectARX for AutoCAD : Managed Class Reference...
Хочу уточнить:
1. RealDWG с AutoCAD не распространялось, не распространяется и думаю никогда распространяться не будет. Эта технология лицензируется отдельно и стоит не дешево: http://www.autodesk.com/realdwg
Как видите за первый год €5000 и по €2500 за каждый последующий.
2. Внутри папки с AutoCAD нет папки bin и соотвественно внутри неё нет папки RealDWG
3. С RealDWG корректно с точки зрения лицензии работать без установленного AutoCAD, а вот то о чем вы говорите - т.е. библиотеки acmgd.dll и acdbmgd.dll (а еще и accoremgd.dll начиная с AutoCAD 2013), входящие в состав AutoCAD можно использовать только с AutoCAD и с точки зрения лицензии и с точки зрения вообще возможности, так как они статически прилинкованы к acad.exe и без него работать не будут.
Если я правильно понял о чем Вы говорите, то речь идёт о AutoCAD .NET API и использовать его можно только внутри AutoCAD, т.е. создавать .NET-сборки (dll-файлы), которые загружаются внутрь AutoCAD (например, командой _NETLOAD)
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Повторюсь. В составе AutoCAD Map 3D, как и в составе ни одного из продуктов Autodesk, кроме самого RealDWG SDK, нет папки bin\RealDWG по той причине, что RealDWG - продукт, который лицензируется отдельно за отдельную плату. Тот факт, что у Вас в составе AutoCAD Map есть папка bin\RealDWG может говоритль либо о том, что Вы или Ваша фирма действительно лицензированные пользователи RealDWG, либо что Вы её получили незаконным путём, о чем мне даже думать не хочется...
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.