Тема: совйства Custom object

Такая интересная ситуация. Значит есть свой объект, унаследованный от полилинии (AcDbPolyline). У этого объекта есть ряд свойств. На моем компьютере все отображается нормально (нарисовал объект, выделил, клацнул правой кнопкой мышки, выбрал в меню "Свойства..." и появилось окно свойств со свойствами моего объекта.) Проверял еще на 4 компах, все в норме.
НО, поставил это все на 5-ый комп. Объект рисуется, выделяется, собираемся посмотреть свойства и получаем в окне свойств - "Ничего не выбрано" и стандартные свойства для этого варианта. Такое чувство, что не отрабатывает функция

Acad::ErrorStatus CAcDbRope::subGetClassID(CLSID * pClsid) const
{
    assertReadEnabled();
    *pClsid = CLSID_AcDbRopeWraper;
    return Acad::eOk;
}

PS: может саму DBX надо как-то особым образом регистрировать в системе или еще что-то этом духе?
Подскажите кто знает, хоть в какую сторону копать? :)

Re: совйства Custom object

Просто как пользователь када, а не знаток арха, могу сказать, что такое бывает с обычными объектам.
Т.е. выделяешь объекты на чертеже, а в палитре свойст пишет ничего не выбрано. При повторном выделении, обычно, все начинает показыватся в палитре свойств.

Autocad 2008, есть SPDS GraphiCS 4.

Так что, возможно это глюк работы палитры.

Re: совйства Custom object

не уверен, т.к. свойства стандартных акадовских объектов отображаются.

Re: совйства Custom object

да, еще маленькое добавление.
Автокад для тестирования проблемы 2010 и 2011, операционка - WinXP, Win7.
такое странное поведение наблюдается ТОЛЬКО на Windows 7 для обоих версий акада.

Re: совйства Custom object

Николай пишет:

да, еще маленькое добавление. Автокад для тестирования проблемы 2010 и 2011, операционка - WinXP, Win7. такое странное поведение наблюдается ТОЛЬКО на Windows 7 для обоих версий акада.

А прав хватает для регистрации?

Re: совйства Custom object

А прав хватает для регистрации?

Установка программы идет под админом. папка с программой имеет полный доступ (чтение запись) под любым пользователем из которого идет работа. dbx регистрируются в реестре при помощи функции (прописывается в ветку ObjectDBX конкретного автокада)

void registerDBX(const ACHAR * dbxName, const ACHAR * dbxPath, const ACHAR * dbxDescription)
{
    AcadAppInfo appInfo;
    appInfo.setAppName(dbxName); // хочу чтоб DBX так называлась
    appInfo.setModuleName(dbxPath);// полное имя DBX включая путь
    appInfo.setAppDesc(dbxDescription); // описалово для DBX
    appInfo.setLoadReason(AcadApp::LoadReasons(AcadApp::kOnProxyDetection | AcadApp::kOnAutoCADStartup));
    appInfo.writeToRegistry(true,true);
}

При вызове из ARX функции рисования моего объекта он нормально отрабатывает, все рисуется правильно. Но при вызове его окна свойств, само окно говорит, что ничего не выбрано.
Если делать "быстрый выбор", то объектов моего типа вообще нет в списке доступных, и перед появлением окна быстрого выбора появляется акадовский messagebox "Ничего не выбрано: 3" (3 - это количество моих объектов в чертеже)

Re: совйства Custom object

А COM-wrapper для CAcDbRope делал? И он загружен? Если нет: http://adn.autodesk.com/adn/servlet/dev … ID=4900509

Re: совйства Custom object

А COM-wrapper для CAcDbRope делал?

Конечно, иначе б не работало нигде. DBX - два в одном (при создании выставил галочку Implement a COM Server using ATL).Там и класс враппера и класс описания объекта. Вчера вечером поставил на комп Win7 и 2010 автокад. запустил под админом, все работает. сделал пользователя с пользовательскими правами (особо не заморачивался настройками прав на отдельные папки. это все сделала сама семерка). запустил под ним, тоже все работает. сегодня поеду туда, где не работает и буду мучать админа :)
я так подозреваю, что все-таки пробема в правах, хотя сам автокад на том компьютере работает нормально при тех правах, которые дал админ пользователю.

Re: совйства Custom object

Расскажете, до чего с тамошним админом договоритесь? Есть подобная проблема.

Re: совйства Custom object

рассказываю. все получилось :):):)
сеть построена на доменной структуре. админы че-то намудрили с правами пользователя, да и в самом акаде нашел несколько неправильных путей поддержки (например, вспомагательные файлы печати, таблицы стилей печати и т.п.). и вот непонятно, как это все счастье им удалось поставить:). сам автокад вроде работает, но... по поводу печати сразу были вопросы из-за путей. Другие меня не интересовали, поэтому я там не лазил.

моя dbx - это посути связь COM-объекта и описалова класса примитива (ну уж очень лень делать это отдельно в двух проектах). Так вот та часть, которая COM - требует регистрации, а права админы закрыли :(. и в итоге макрос авторегистрации тихонько провалился, и subGetClassID работала с NULL вместо моего COM.
Пришлось делать запуск акада от имен админа под текущим пользователем и это позволило нормально зарегить все DBX файлы.
Вроде бы все.

Re: совйства Custom object

Николай пишет:

Пришлось делать запуск акада от имен админа под текущим пользователем и это позволило нормально зарегить все DBX файлы.

Если я правильно понял, то это достаточно сделать один раз или внести в реестр (в ветку HKCR).

Re: совйства Custom object

да, один раз.
по поводу ветки не скажу, слепки реестра не делал.
странная картина получилась. по логике, писаться оно все должно в HKCU, но выглядит так, будто нет доступа к реестру (возможно оно полезло в HKLM), хотя свою собственную ветку реестра (и несколько других для защиты :)) в HKCU редактирую свободно.
кстати, Александр, а как руцями зарегистрировать dbx, содержащую COM? regsrv32 мне сказал, что нет точки входа, и что я пытаюсь зарегистрировать какою-то ерунду и отпал :)

Re: совйства Custom object

На сколько я понимаю, такие dbx-ы регистрируются в HKEY_CLASSES_ROOT\CLSID\... А туда у пользователей в Vista и 7-ке нет доступа на запись.

Re: совйства Custom object

bender пишет:

На сколько я понимаю, такие dbx-ы регистрируются в HKEY_CLASSES_ROOT\CLSID\...

Не dbx-ы, а COM-сервера (в данном случае это COM-wrapper для dbx)

bender пишет:

А туда у пользователей в Vista и 7-ке нет доступа на запись.

У простых пользователей и в XP туда нет доступа для записи.
HKEY_CLASSES_ROOT\CLSID - это суммарное содержимое HKEY_LOCAL_MACHINE\SOFTWARE\Classes и HKEY_CURRENT_USER\Software\Classes. Так что в часть доступ у них есть, а в часть нет.

(изменено: Александр Ривилис, 7 февраля 2011г. 10:26:35)

Re: совйства Custom object

Николай пишет:

кстати, Александр, а как руцями зарегистрировать dbx, содержащую COM? regsrv32 мне сказал, что нет точки входа, и что я пытаюсь зарегистрировать какою-то ерунду и отпал smile:)

Через regsrv32 не получится, т.к. в таблице импорта есть dll-ки (а возможно и acad.exe - зависит от того, как ты его сделал), которые regsvr32 найти не может. Когда-то мне нужно было разрегистрировать свой arx COM-сервер. Пришлось писать arx-файл, который грузил этот COM-сервер в AutoCAD (через LoadLibrary) и выполнял DllUnregisterServer для него.
А регистрация "руцями" - это написание своего reg-файла, который запускаешь с правами администратора (или в инсталляторе). Если найдешь ObjectARX SDK 2008 (позднее этого примера не стало), то там есть такой reg-файл: samples\entity\Smiley\Smiley - COM.reg