Hi Huw,

This is a newer version:
static HRESULT CreateITextRange(IRichEditOle *reOle, LONG start, LONG end,
������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ������ ITextRangeImpl *txtRge, ITextRange** ppRange)
{
������ ������ IRichEditOleImpl *reOleImpl = impl_from_IRichEditOle(reOle);

������ ������ txtRge->ITextRange_iface.lpVtbl = &trvt;
������ ������ txtRge->ref = 1;
������ ������ IRichEditOle_AddRef(reOle);
������ ������ txtRge->reOle = reOleImpl;
������ ������ txtRge->start = start;
������ ������ txtRge->end = end;
������ ������ list_add_head(&reOleImpl->rangelist, &txtRge->entry);
������ ������ *ppRange = &txtRge->ITextRange_iface;
������ ������ return S_OK;
}

I will������prefer passing ITextRangeImpl into CreateITextRange instead of ITextRange interface.
So we don't need to impl_from_ITextRange again. Is it also ok?

btw, I didn't alloc txtRge (txtRge = heap_alloc(sizeof(ITextRangeImpl));) in CreateITextRange(),
because������CreateITextRange()������was just created for sharing code with ITextRange::GetDuplicate and GetDuplicate
will return E_FAIL for all any other error[0] when ITextDocument::Range returning E_OUTOFMEMORY.[1]

Thanks.

[0]������http://msdn.microsoft.com/en-us/library/windows/desktop/bb787840(v=vs.85).aspx
[1]������http://msdn.microsoft.com/en-us/library/windows/desktop/bb774097(v=vs.85).aspx

2014-09-12 15:53 GMT+08:00 Huw Davies <huw@codeweavers.com>:
On Fri, Sep 12, 2014 at 10:47:44AM +0800, Jactry Zeng wrote:
>
> 2014-09-12 4:43 GMT+08:00 Sebastian Lackner <sebastian@fds-team.de>:
> >
> >
> > Are you sure? Doesn't this test below show exactly the opposite? It seems to
> be safe
> > to release the ITextDocument, and afterwards call an ITextRange function - it
> will just
> > return CO_E_RELEASED since the parent object was already released. Or am I
> misunderstanding
> > this code?
>
> So sorry, I made a mistake yesterday here. I added more a ITextRange::Release
> before the ITextRange calling
> in my new tests code yesterday.
> Functions of ITextRange will return������CO_E_RELEASED after reOle/txtDoc were
> released and will
> crash after the ITextRange was released.

In that case let's go with your proposed implementation.

Huw.



--
Regards,
Jactry Zeng