AcDbObjectPointer ObjectARX 2014. Debug_x64

Автор Тема: AcDbObjectPointer ObjectARX 2014. Debug_x64  (Прочитано 7664 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Николай ГорловАвтор темы

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
AcDbObjectPointer ObjectARX 2014. Debug_x64
« : 21-01-2016, 14:48:41 »
вот такой код:
Код - C++ [Выбрать]
  1. static void LCTSoftpointertest ()
  2. {
  3.         AcDbObjectId eId;
  4.         //AcDbCurve * pCurve;//вариант 1
  5.         AcDbObjectPointer<AcDbCurve> pCurve;//вариант 2
  6.         ads_name ent;
  7.         AcGePoint3d ptFrom, ptTo;
  8.         ACHAR mode[133];
  9.         bool res = true;
  10.         while (res)
  11.         {
  12.                 acedInitGet(RSG_NONULL,NULL);
  13.                 if(acedEntSel(_T("\nУкажите кривую: "),ent,asDblArray(ptFrom))!=RTNORM) return;
  14.  
  15.                 if(acdbGetObjectId(eId, ent)!= Acad::eOk) return;
  16.                 pCurve.open(eId,AcDb::kForRead);
  17.                 if (pCurve.openStatus() != Acad::eOk)
  18.                         acedAlert(_T("Это не кривая"));
  19.                 else
  20.                         res = false;
  21.         }
  22.  
  23.         AcGeMatrix3d matWcs;
  24.         matWcs.setCoordSystem(AcGePoint3d(0.0,0.0,0.0),AcGeVector3d::kXAxis,AcGeVector3d::kYAxis,AcGeVector3d::kZAxis);
  25.         acedSetCurrentUCS(matWcs);//WCS
  26.  
  27.         while(true)
  28.         {
  29.                 acedInitGet (RSG_OTHER, _T("Р Д Т Ч"));
  30.                 switch (acedGetKword(_T("\n[<Раз>/Два/Три/Четыре]: "), mode))
  31.                 {
  32.                         case RTCAN:
  33.                         case RTERROR:
  34.                                 acedRestorePreviousUCS();
  35.                                 return;
  36.  
  37.                         case RTNONE:
  38.                                 _tcscpy(mode,_T("Р"));
  39.                                 break;                                  
  40.                 }
  41.  
  42.                 acedInitGet(RSG_NONULL,NULL);
  43.                 if(acedGetPoint(NULL,_T("\nПервая точка: "),asDblArray(ptFrom))!=RTNORM)break;
  44.                 pCurve->getClosestPointTo(ptFrom,ptFrom,Adesk::kFalse);
  45.  
  46.                 acedInitGet(RSG_NONULL,NULL);
  47.                 if(acedGetPoint(asDblArray(ptFrom),_T("\nВторая точка: "),asDblArray(ptTo))!=RTNORM)break;
  48.                 pCurve->getClosestPointTo(ptTo,ptTo,Adesk::kFalse);
  49.         }
  50.         acedRestorePreviousUCS();
  51. }
  52.  
  53. ACED_ARXCOMMAND_ENTRY_AUTO(CRullerApp, LCTSoft, pointertest, pointertest, ACRX_CMD_TRANSPARENT, NULL)
  54.  
и вот такой результат :) (http://autode.sk/1lynuL6) теги asc почему-то не сработали



баг воспроизводится только в конфигурации Debug для ObjectARX2014. еще проверил Debug и Release для 2012, 2013, 2015, 2016. Всё работает нормально.
« Последнее редактирование: 21-01-2016, 15:07:52 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbObjectPointer ObjectARX 2014. Debug_x64
« Ответ #1 : 21-01-2016, 15:07:13 »
теги asc почему-то не сработали
Наверное потому, что инструкцию читал невнимательно и подставлял сокращенный URL, а нужно было ставить полный - я исправил.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Николай Горлов 22-01-2016, 12:11:56

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbObjectPointer ObjectARX 2014. Debug_x64
« Ответ #2 : 21-01-2016, 23:24:22 »
Увы, но и в AutoCAD 2014 SP1 x64 это поведение у меня не воспроизводится:

У меня подозрение, что у тебя какие-то очень хитрые настройки компилятора/линкера в этой конфигурации, которые приводят к такому поведению. Например, смесь Debug/Release CRT-библиотек или библиотеки V90/V100/V110. Точнее сказать затрудняюсь.
Проверь с arx-файлами из тестового примера, который я приложил:
TestRanR19x64.arx - Debug x64
TestRanR19x32.arx - Debug x86
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай ГорловАвтор темы

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: AcDbObjectPointer ObjectARX 2014. Debug_x64
« Ответ #3 : 22-01-2016, 11:00:12 »
проверил с вашими arx (x64) на своём компьютере. падает.
потом проверил та чистом компьютере, который использую для глобального ))) тестирования. работает.
на своём выгрузил всё лишнее, оставив только голый автокад. работает.
короче говоря, всё работает. теперь только осталось найти реактор в моих "самопальных" arx-инах, который гробит поинтер, но игнорирует стандартный вариант открытия объектов ))). так что вопрос можно считать решенным )
спасибо за помощь.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AcDbObjectPointer ObjectARX 2014. Debug_x64
« Ответ #4 : 22-01-2016, 14:38:07 »
Да уж...  ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение