高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】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!
|