高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】how to retrieve info for ole links
how to retrieve info for ole links
how to retrieve info for ole links
when you create a dwg drawing, you insert an object linked to a word document (insert->ole objects). after that, you go to edit->ole links. this linked word document will be listed in the links window.
how can i get those info about ole links?
thanks.
hi,
the simplest way is to use mfc classes coledocument and coleclientitem in your application, in odamfcapp v1.14 (ole.cpp, odamfcappdoc.h/.cpp) you can see how.
thanks for your reply. but i only have v1.13. and v1.14 only in beta version, which i cannot use it in the product development.
could you please show me how to do it using earlier version than v1.14, if possible? thanks.
hi,
functionality i referred to is available since 1.13.03.
quote:
originally posted by dmitry a. novikov
hi,
functionality i referred to is available since 1.13.03.
but the latest version is "dwgdirect鈩?version 1.13.02, posted 6/24/2005". where can i get 1.13.03?
quote:
originally posted by xidongzhang
but the latest version is "dwgdirect鈩?version 1.13.02, posted 6/24/2005". where can i get 1.13.03?
never mind. the sample odamfcapp in 1.13.02 already included the ole.cpp you mentioned above. thanks dmitry.
quote:
originally posted by dmitry a. novikov
hi,
functionality i referred to is available since 1.13.03.
hi dmitry,
thanks for you reply.
i tried the following code. but i could not get link name and path. (please see the lines between "????????????????").
any ideas for this?
// create a database and load the drawing into it.
oddbdatabaseptr pdb;
pdb = m_svcs.readfile(strftoprocess, false, false, oda::ksharedenyno);
// open the blocks table
oddbblocktableptr pblocks = pdb->getblocktableid().safeopenobject(oddb::kforwrite) ;
// get an iterator for the block table that skips deleted records
oddbsymboltableiteratorptr pblkiter = pblocks->newiterator();
// for each block in the block table
for (pblkiter->start(); ! pblkiter->done(); pblkiter->step())
{
// open the block
oddbblocktablerecordptr pblock = pblkiter->getrecordid().safeopenobject(oddb::kforwrite);
oddbobjectiteratorptr pentiter = pblock->newiterator();
for (; !pentiter->done(); pentiter->step())
{
// get the entity in a pointer
oddbentityptr pent = pentiter->objectid().safeopenobject(oddb::kforwrite);
//check if entity is a ole object
if (pent->iskindof(oddbole2frame::desc()))
{
cstring stemp;
odrectangle3d rect;
//oddbole2frameptr poleframe = ((oddbole2frameptr)pent);
odsmartptr<oddbole2frame> poleframe = ((oddbole2frameptr)pent);
odsmartptr<odoleitemhandlerimpl> poleitem = poleframe->getitemhandler();
// i can get the position of it
poleframe->position(rect);
stemp.format("upleft: (x=%e, y=%e, z=%e)", rect.upleft.x, rect.upleft.y, rect.upleft.z);
// ?????????????????????????????????????????????????? ????????
// but neither the following lines can get ole link info (return blank strings)
stemp.format("usertype: %s", (const char *)poleframe->getusertype());
stemp.format("type: %d", poleframe->gettype());
stemp.format("linkname: %s", (const char *)poleframe->getlinkname());
stemp.format("linkpath: %s", (const char *)poleframe->getlinkpath());
// nor the following lines
stemp.format("usertype: %s", (const char *)poleitem->usertype());
stemp.format("type: %d", poleitem->type());
stemp.format("linkname: %s", (const char *)poleitem->linkname());
stemp.format("linkpath: %s", (const char *)poleitem->linkpath());
// ?????????????????????????????????????????????????? ????????
}
}
}
last edited by xidongzhang; 21st november 2005 at 12:31 pmfff">.
another question
i modified the sample application odmfcapp, and it worked.
but i could not make it works without mfc document frames support . i had built a dll for getting xrefs and rasterrefs. and now i want to add ole links support to it. i did not use and will not want to use mfc document frames.
how can i make it? please, please..............................
|