Тема: acdbGetSummaryInfo и ACHAR*&

Пытался сделать как в этой теме, но столкнулся вот с этим getAuthor, который требует ACHAR*& и никак не победить.

   TCHAR* acName = NULL;
   AcDbDatabaseSummaryInfo* sumInfo = NULL;
   AcDbDatabase* pDB = NULL;
   pDB=acdbHostApplicationServices()->workingDatabase();
   if ((es=acdbGetSummaryInfo(pDB, sumInfo)) == Acad::eOk ) {
       if ((sumInfo->getAuthor(acName)) == Acad::eOk) {
            acutPrintf(L"Автор: '%s'\n\n", acName);
       }
   }
Автор: ''

Выведите меня, пожалуйста, из отупения =(

Re: acdbGetSummaryInfo и ACHAR*&

А так:

acutPrintf(L"Автор: %s\n\n", acName); 

(изменено: Сергей, 13 декабря 2011г. 19:29:08)

Re: acdbGetSummaryInfo и ACHAR*&

Я на самом деле про это:

    TCHAR* acValue = NULL;
    AcDbDatabaseSummaryInfo* sumInfo = NULL;
    AcDbDatabase* pDB = NULL;
    pDB=acdbHostApplicationServices()->workingDatabase();
    if ((acdbGetSummaryInfo(pDB, sumInfo)) == Acad::eOk ) {
        if ((sumInfo->getAuthor(acValue)) == Acad::eOk) {
         acutPrintf(L"Author: %s\n\n", acValue);
        }
        if ((sumInfo->getComments(acValue)) == Acad::eOk) {
         acutPrintf(L"Comments: %s\n\n", acValue);
        }
    
Author:
Comments:

Т.е.: может я неправильно переменные объявляю или значение забираю не так?
Ну не могут же они все пустые быть.

(изменено: Александр Ривилис, 14 декабря 2011г. 01:13:04)

Re: acdbGetSummaryInfo и ACHAR*&

Сергей пишет:

Ну не могут же они все пустые быть.

Если их не заполнили, то они будут пустыми.
Вот тебе рабочий код реализации на ObjectARX lisp-функции (getdwgprops):

  static resbuf *getdwgprops(AcDbDatabase *db)
  {
    resbuf *rbb=acutBuildList(RTLB,RTNONE), *rb = rbb;
    AcDbDatabaseSummaryInfo *pInfo;
    Acad::ErrorStatus es;
    ACHAR *str = NULL;
    if (((es = acdbGetSummaryInfo(db, pInfo)) == Acad::eOk) && pInfo) {
        es = pInfo->getTitle(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Title"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Title"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getSubject(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Subject"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Subject"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getAuthor(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Author"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Author"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getKeywords(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Keywords"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Keywords"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getComments(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Comments"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("Comments"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getHyperlinkBase(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("HyperlinkBase"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("HyperlinkBase"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getRevisionNumber(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("RevisionNumber"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("RevisionNumber"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }
        es = pInfo->getLastSavedBy(str);
        if (str && es == Acad::eOk) {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("LastSavedBy"),RTSTR,str,RTLE,RTNONE);
          free(str); str = NULL;  while (rb->rbnext) rb = rb->rbnext;
        } else {
          rb->rbnext = acutBuildList(RTLB,RTSTR,_T("LastSavedBy"),RTSTR,_T(""),RTLE,RTNONE);
          while (rb->rbnext) rb = rb->rbnext;
        }

        int nCustom = pInfo->numCustomInfo();
        for (int i=0; i < nCustom; i++) {
          ACHAR* key = NULL, *value = NULL;
          if (pInfo->getCustomSummaryInfo(i, key, value) == Acad::eOk) {
            if (key && value) {
              rb->rbnext = acutBuildList(RTLB,RTSTR,key,RTSTR,value,RTLE,RTNONE);
              free(key); free(value);  while (rb->rbnext) rb = rb->rbnext;
            }
          }
        }
        rb->rbnext = acutBuildList(RTLE,RTNONE);
        return rbb;
    } else {
      acutRelRb(rbb); return NULL;
    }
  }

Re: acdbGetSummaryInfo и ACHAR*&

Если их не заполнили, то они будут пустыми.

А ведь и вправду. Спасибо за скрипт.