| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
12.07.2010, 07:36 | #1 | |
GetKeyword + InitializeUserInput + VB.Net = проблема
Регистрация: 12.07.2010
Сообщений: 6
|
||
Просмотров: 3730
|
|
||||
Цитата:
Цитата:
|
||||
|
||||
Регистрация: 12.07.2010
Сообщений: 6
|
Олег, я рад, что Вы обратили внимание на мой пост.
Однако предлагаемое Вами решение для меня не подходит по двум причинам: 1) Это, насколько я понимаю, предполагает написание модуля, встраиваемого в автокад (может, тут я ошибаюсь), ну а я подсоединяюсь к автокаду параллельно. 2) Где-то вначале такого кода подразумевается вставить примерно следующее: Код:
Можно ли этого достичь как-то иначе, без референсов? |
|||
|
||||
Регистрация: 12.07.2010
Сообщений: 6
|
hwd, уточним, да, обладает, но, насколько я помню, только с 3-ей версии фреймворка. Я же написал, что у меня 2-й, не хочу пока ставить 3-й фреймворк. Да, через Invoke вполне реально. Но в бейсике придется написать меньше кода, который будет выглядеть лучше и его будет проще поддерживать. Можете считать меня аппологетом 3-го фреймворка и этой его фичи, которую все ругают
Sleekka, почему Вы так считаете? Олег, к сожалению, мое сообщение не отобразилось (типа ушло на модерацию), поэтому напишу кратко - я бы не хотел добавлять референсы, в этом для меня весь смысл сборки на бейсике. |
|||
|
||||||
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Последний раз редактировалось hwd, 12.07.2010 в 11:22. |
||||||
|
||||
Регистрация: 12.07.2010
Сообщений: 6
|
hwd, честно, я не хочу спорить. Более того, результат спора никак не относится к решению возникшей у меня проблемы - что через Invoke, что через механизмы бейсика - проблема таким образом не решится.
Позднее связывание - это довольно широкий термин. Чем лично мне (заметьте, лично мне) приятен бейсик - это тем, что операции Invoke (по несколько штук для каждого обращения к методу объекта) он выполняет сам, так сказать, инлайн. Достаточно просто написать "AcadApp.Documents" вместо пары строк с Invoke'м. В С# в 3-м фреймворке это, кажется, тоже есть (не проверял, но журнальчики читал). Во 2-м же - надо делать Invoke. Вариант "инлайн" мне нравится больше. Я не настаиваю, у Вас может быть иное мнение по этому поводу. Вы, вероятно, будете говорить про производительность, контроль кода и "неуловимые" ошибки, возникающие в ситуации с неуправляемым приведением типов. Да, все это так (я, между прочим, когда-то начинал с чистого С, dll-hell'а, MFC, gcc и прочих приятных вещей), но меня это устраивает, потому что я имею иллюзию, что контролирую процесс расползания этого подхода по остальным модулям системы. Поэтому предлагаю не спорить, а сосредоточиться на решении конкретной проблемы. По поводу ObjectARX конкретизирую более внятно - я не делаю arx. Если бы делал - вопроса о бейсике и не стояло бы. Я, наиболее вероятно, писал бы это на сях. |
|||
|
||||
Цитата:
Наиболее полную информацию о произведённых модификациях в составе библиотеки очередной версии AutoCAD можно почерпнуть как раз-таки только из документации самого ObjectARX. Т.о. полная совместимость кода с новыми версиями AutoCAD не гарантируется (к сожалению), и для очередной версии AutoCAD придётся проверять, на месте ли те классы, которыми вы пользуетесь. Сие касается любых плагинов AutoCAD и написал я это применительно к вашей фразе: Цитата:
п.с. На мой взгляд Олег (jr.) предлагает наиболее оптимальный вариант. п.с.2 А чем вас не устроил .Net API AutoCAD? Autodesk его довольно таки интенсивно расширяет от версии к версии. Работа с подшивкой, к примеру, вообще осуществляется через библиотеку, написанную на .Net (т.е. это не обёртка). Последний раз редактировалось hwd, 12.07.2010 в 12:52. |
||||
|
||||
Регистрация: 12.07.2010
Сообщений: 6
|
Цитата:
Еще раз повторюсь - у меня не плагин. Он работает во внешней относительно автокада памяти и внутрь не лезет. .Net API... Наеврное, хорошая штука. Скажу честно, не пробовал. Опять же вопрос по "раннему/позднему связыванию" - оно там как? Чисто интерфейсы? Или все-таки придется шевелить ручками для каждой версии автокада? Я, конечно, поищу. Спасибо за подсказку, как это называется. Вариант Олега я, безусловно, поставил для себя в верхние строчки списка (даже спасибо сказал ). И все же - почему не срабатывает нормально InitializeUserInput? Ему статик нужен на вход? Можно ли как-то это победить малой кровью? Последний раз редактировалось huckleberry, 12.07.2010 в 16:10. |
|||
|
||||
Цитата:
Официальный мануал по .Net API здесь, так же интерес представляют следующие ресурсы: 1. тынц 2. тынц Вообще .Net API AutoCAD использовать гораздо удобней, если не принципиально, чтобы ваше приложение работало не как плагин, а как внешний "аппликэйшен". Вообще по тематике .Net программирования имеет смысл задавать вопросы на англоязычных форумах. На dwg.ru и caduser.ru вероятность получения ответа значительно ниже, поскольку основная масса форумчан пишут на Lisp. Из зарубежных форумов могу посоветовать этот и этот. Там шансов на ответ больше. Хороших русскоязычных ресурсов по .Net API AutoCAD, я не встречал (да и объём официального английского мануала, честно говоря, оставляет желать лучшего)... На буржуйских сайтах встречаются монстры программирования вроде Tony Tonzillo. На этом сайте по .Net (применительно к AutoCAD) лучше всех разбирается Александр Ривилис, но его, к сожалению, с некоторых пор не видно (предполагаю, что он в отпуске). Последний раз редактировалось hwd, 12.07.2010 в 16:30. |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
В справке по AutoCAD ActiveX вторым аргументом должен быть variant, ссылающийся на массив строк. Вот выдержка из справки (см. выделенное оранжевым цветом):
Код:
Имеется ввиду, сделать массив из одной строки "Asd Zxc" ! Возможно в случае с литералом компилятор именно это и делает втихую. Подозреваю, что метод utl.InitializeUserInput(1, keywords) в качестве второго аргумента ожидает Object. И если ему передать строку а не массив строк,то ошибки компиляции не будет, но и смысл исказится. Нужен массив из одной строки!
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 12.07.2010 в 18:07. |
|||
|
||||
Регистрация: 12.07.2010
Сообщений: 6
|
Цитата:
код был такой: Код:
Код:
hwd, за ссылки ОГРОМНОЕ спасибо. Активно изучаю. |
|||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
А как выглядит прототип (сигнатура) метода utl.InitializeUserInput(...)?
И ещё. Раз уж была просьба в фантазиях себя не ограничивать, то предлагаю проверить следующее. Перед тем, как передать keywords в utl.InitializeUserInput(1, keywords) выполнить следующее: keywords = String.Intern( keywords ).
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 13.07.2010 в 15:43. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с пространством листа и ограничением печати | Мысь | AutoCAD | 27 | 14.09.2018 13:13 |
Проблема с выводом на печать чертежей, содержащийх подрезанные растровые изображения (AutoCAD 2009LT) | GazRust | AutoCAD | 13 | 27.06.2014 10:51 |
Проблема с файлом после импорта из Компас | Alex 166 | AutoCAD | 7 | 22.08.2008 10:33 |
проблема экспорта файлов по IFC из ADT в лиру и ревит | thygank | Revit | 1 | 03.08.2008 18:08 |
Проблема с ксероксом Canon PC860 | _Oleg_ | Разное | 5 | 26.12.2007 10:18 |