On Wed, Jun 25, 2014 at 06:56:00PM +0800, Jactry Zeng wrote:
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c index 2af2582..65e70fa 100644 --- a/dlls/riched20/editor.c +++ b/dlls/riched20/editor.c @@ -4468,6 +4468,13 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam, case EM_GETOLEINTERFACE: { LPVOID *ppvObj = (LPVOID*) lParam;
- if (editor->reOle)
- {
*ppvObj = editor->reOle;
IRichEditOle_AddRef(*ppvObj);
return 1;
- }
- return CreateIRichEditOle(editor, ppvObj); } case EM_GETPASSWORDCHAR:
Better to assign editor->reOle here too. That will be one ref, then every returned iface should add another ref. So the first iface returned will have refcount of 2 and then your tests will pass.
You release the final ref in the editor destructor.
diff --git a/dlls/riched20/editstr.h b/dlls/riched20/editstr.h index f139c29..3722c82 100644 --- a/dlls/riched20/editstr.h +++ b/dlls/riched20/editstr.h @@ -388,6 +388,7 @@ typedef struct tagME_TextEditor { HWND hWnd, hwndParent; ITextHost *texthost;
- LPVOID reOle;
Needs correct type.
Huw.