Тема: Такие разные resbuf ы

Интересный факт:
функции acutBuildList и acutNewRb создают разные (resbuf)ера.
Пример:
head = acutBuildList(AcDb::kDxfText , "This is x data" ,  0);
тогда
restype ==1 ; (AcDb::kDxfText = 1)
resval.rstring == "This is x data";
rbnext == NULL
head = acutNewRb(RTSTR);
tail->resval.rstring = "This is x data";
tail->rbnext = NULL;
а здесь
restype ==5005 ; (RTSTR = 5005)
resval.rstring == "This is x data";
rbnext == NULL
В первом случае restype == 1, а во втором restype == 5005.
AcDbXrecord *pXrec = new AcDbXrecord;
pXrec->setFromRbChain(*head) ;
Функция setFromRbChain понимает resbuf только от функции acutBuildList,
а когда подсовываешь ей resbuf из второгт примера то она кидает unhandled exception.
Спрашивается зачем делать resbuf разного типа?

Re: Такие разные resbuf ы

В первом случае, через AcDb::kDxfText определяется структура с кодами DXF, во втором, через RTSTR определяется структура списков Автолиспа.
Для AcDbXrecord нужна структура с DXF кодами, поэтому новый буфер надо определять, через  acutNewRb(AcDb::kDxfText ). При этом нужно еще выделять память под строку.

char *resString = "This is x data";
head= acutNewRb(AcDb::kDxfText);
head->resval.rstring = (char*) acad_malloc(strlen (resString) + 1);
strcpy(head->resval.rstring, resString);