![]() |
【转帖】acdbdictionary问题
acdbdictionary问题
acdbdictionary问题 我以前用lsp写的程序中,使用了命名辞典. lsp函数: vlax-ldata-put dictname key value. 这个命名词典: 名称: dream.fei 包含的数据: (("vpscale" . 45) ("printscale" . "45") ("pmlx" . "3") ("blkn" . "6112810484498")) 我现在想取出 "printscale" 这个key 所对应的值来. 请问用c++应该怎么搞? 我现在写成这样出错: acdbdictionary *pnameobj = null; if (acdbhostapplicationservices()->workingdatabase()->getnamedobjectsdictionary(pnameobj, acdb::kforread) != acad::eok) return; acdbobjectid dictid = null; if (pnameobj->getat(_t("dream.fei"), dictid) != acad::eok) { pnameobj->close(); return; } pnameobj->close(); acdbxrecord *pxrec = null; if(acdbopenobject((acdbobject*&)pxrec, dictid, acdb::kforread) != acad::eok) return; struct resbuf *prb = null; pxrec->rbchain(&prb); pxrec->close(); if (prb != null) { struct resbuf *tmp; tmp = prb; while (tmp) { acutprintf(_t("\n获取的字符串数据: %s"),tmp->resval.rstring ); tmp= prb->rbnext; } acutrelrb(prb); } 复制代码 如果您打算回答我去看帮助文档的话. 我看你还是不要回复了,省得浪费大家时间. 帮助我已经看过了,对不上号. [ 本帖最后由 dream.fei 于 7-11-28 05:37 pm 编辑 ] 无言中,除了顶一下还能说什么呢? 我现在用的是autocad 8,objectarx8,所有代码均是,不再另行通知。 感觉到arx里面取不到lisp写的词典啊, , 所以精彩 !!! 肯定可以的,等我有空了来写 help help help 一个程序在这卡起了.老大们,伸个援手吧~ //here, you cannot open a dictionary as a xrecord,it is very dangerous!! acdbxrecord *pxrec = null; if(acdbopenobject((acdbobject*&)pxrec, dictid, acdb::kforread) != acad::eok) return; // // your record is stored in dictioanry (*pdict) // so you should get the pointer of record by a key, for example, "xrec1" acdbxrecord *pxrec; pdict->getat("xrec1", (acdbobject*&) pxrec, acdb::kforread); [ 本帖最后由 gangzaishao 于 7-12-2 01:58 pm 编辑 ] 我这样改动了一下,但还是取不到值: static void plantype_tst(void) { acdbdictionary *pnameobj = null; if (acdbhostapplicationservices()->workingdatabase()->getnamedobjectsdictionary(pnameobj, acdb::kforread) == acad::eok) { acdbdictionary *pdict = null; if(pnameobj->getat(_t("dream.fei"), (acdbobject*&)pdict, acdb::kforread) == acad::eok) { acdbxrecord *pxrecd = null; if (pdict->getat(_t("rintscale"), (acdbobject*&)pxrecd, acdb::kforread) == acad::eok) { struct resbuf *prb = null; pxrecd->rbchain(&prb); if (prb != null) acutprintf(_t("\n得到的结果: %s."), prb->resval.rstring); pxrecd->close(); acutrelrb(prb); } pdict->close(); } pnameobj->close(); } } 复制代码 [ 本帖最后由 dream.fei 于 7-12-2 04:41 pm 编辑 ] 下载次数:1 7-12-2 04:41 pm 该dwg中包含该词典 if (pdict->getat(_t("rintscale"), 差不多了,检查一下这句。。。 是不是 应该 “printscale” //------- 你可以 这样检查哪里出错了 if(something!=ok) { print "something not valid" } 那句是 printscale , 只是我在帖的时候他变成了表情,所以我就删除了那个表情,忘记把p加上去了. 但是却还是没有值. 在debug的时候,我中断检查过,一直能进入到pxrecd取值. 而且rb也不为空,但是却没有值. [ 本帖最后由 dream.fei 于 7-12-4 01:36 pm 编辑 ] 再测试一回. 发现在进入pxrecd取值后,返回的是 einvalidclassname. 用 arxdbg 查看数据库. 发现 vl 写的辞典key的class是 vl_vol . 而 arx 写的key的class 是 acdbxrecod. 二都是有区别的. 我想不出怎么转换(用acdbxrecod强制转换是不行的). 我已经用arx改写新辞典而放弃了旧的vl辞典. 郁闷~ |
所有的时间均为北京时间。 现在的时间是 08:35 PM. |