+ struct re_object *reobj = NULL;
+ LONG count = 0;
+
+ TRACE("(%p)->(%x, %p, %x)\n", This, iob, lpreobject, dwFlags);
+
+ if (!lpreobject || !lpreobject->cbStruct)
+ return E_INVALIDARG;
+
+ if (iob == REO_IOB_USE_CP)
+ {
+ ME_Cursor cursor;
+
+ TRACE("character offset: %d\n", lpreobject->cp);
+ ME_CursorFromCharOfs(This->editor, lpreobject->cp, &cursor);
+ if (!cursor.pRun->member.run.reobj)
+ return E_INVALIDARG;
+ else
+ reobj = cursor.pRun->member.run.reobj;
+ }
+ else
+ {
+ if (iob > IRichEditOle_GetObjectCount(me))
+ return E_INVALIDARG;
+ LIST_FOR_EACH_ENTRY(reobj, &This->editor->reobj_list, struct re_object, entry)
+ {
+ if (count == iob)
+ break;
+ count++;
+ }
+ }
+ ME_CopyReObject(lpreobject, &reobj->obj, dwFlags);
+ return S_OK;