![]() |
【转帖】how to save ole object in dwgdirect 1.13
how to save ole object in dwgdirect 1.13
how to save ole object in dwgdirect 1.13 hello, i'm trying to save an ole object into database, but unfortunately i don't know how to do it. exactly i'd like to know how create an oddbole2frame object from coleclientitem object. i see the examples attached to dwgdirect, but i don't really understand it... please, could you show me exemplary code or give information how to do it ? thanks marcin hi, we will provide such example asap and let you know where it is. quote: originally posted by dmitry a. novikov hi, we will provide such example asap and let you know where it is. hi where is asap? quote: originally posted by pqcyy hi where is asap? asap = as soon as possible quote: originally posted by dmitry a. novikov asap = as soon as possible sorry! waitting for that! hi, this code shows how to copy ole objet's data to dwg code: #include "memorystream.h" class file : public cfile { odstreambuf& m_stream; public: file(odstreambuf& stream) : m_stream(stream) { m_strfilename = "oddbole2frame binary data."; m_bcloseondelete = false; } uint read(void* lpbuf, uint ncount) { oduint32 nbytesleft = m_stream.length()-m_stream.tell(); if(nbytesleft < ncount) ncount = nbytesleft; m_stream.getbytes(lpbuf, ncount); return ncount; } void write(const void* lpbuf, uint ncount) { m_stream.putbytes(lpbuf, ncount); } }; static void copy(oddbole2frame* pframe, coleclientitem* pitem) { odmemorystreamptr pbuff = odmemorystream::createnew(); { file file(*pbuff.get()); carchive archive(&file, carchive::store); pitem->serialize(archive); } pbuff->rewind(); pframe->getitemhandler()->load(*pbuff.get()); csize size; if (pitem->getextent(&size)) { pframe->unhandled_sethimetricsize(oduint16(size.cx), oduint16(size.cy)); } } hi, dmitry a. novikov how to get ole object's data from dwg? hi, according code above: pframe->getitemhandler()->getcompounddocument(*pbuff.get()); quote: originally posted by dmitry a. novikov hi, this code shows how to copy ole objet's data to dwg hi, thank you very much for help. quote: originally posted by dmitry a. novikov hi, according code above: pframe->getitemhandler()->getcompounddocument(*pbuff.get()); hi, i use following code to read ole object, but it didn't work. i try to use "pframe->getitemhandler()" to get odoleitemhandler*, but the code always throw a exception, so i use "pframe->itemhandler()" instead. when the code runs to "pitem->serialize(archive);", it prompt that the pitem's type flag is not "ot_ole2", why? are there some wrong in my code? btw, why i can't use oddbole2frame::getitemhandler() to get a odoleitemhandler pointer? code: ///////////////////////////////////////////////////////////////////////////////////// class file : public cfile { odstreambuf& m_stream; public: file(odstreambuf& stream) : m_stream(stream) { m_strfilename = "oddbole2frame binary data."; m_bcloseondelete = false; } uint read(void* lpbuf, uint ncount) { oduint32 nbytesleft = m_stream.length()-m_stream.tell(); if(nbytesleft < ncount) ncount = nbytesleft; m_stream.getbytes(lpbuf, ncount); return ncount; } void write(const void* lpbuf, uint ncount) { m_stream.putbytes(lpbuf, ncount); } }; static void copy(oddbole2frame* pframe, coleclientitem* pitem) { odmemorystreamptr pbuff = odmemorystream::createnew(); (pframe->itemhandler())->getcompounddocument(*pbuff.get()); pbuff->rewind(); file file(*pbuff.get()); carchive archive(&file, carchive::load); pitem->serialize(archive); pbuff->rewind(); } //////////////////////////////////////////////////////////////////////////////////// hi, oddbole2frame must be opened for write to call getitemhandler(). we will probably rename(change) these functions to be more adequate. try this code: static void copy(const oddbole2frame* pframe, coleclientitem* pitem) { odmemorystreamptr pbuff = odmemorystream::createnew(); // get item handler for write and get compound document data. //(pframe->getitemhandler())->getcompounddocument(*pbuff.get()); // get item handler for read and store its data in coleclientitem mfc format. (pframe->itemhandler())->save(*pbuff.get()); pbuff->rewind(); file file(*pbuff.get()); carchive archive(&file, carchive::load); pitem->serialize(archive); pbuff->rewind(); } thanks, it works now! best regards! |
所有的时间均为北京时间。 现在的时间是 08:12 AM. |