From: Sebastian Lackner sebastian@fds-team.de
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/oleaut32/olepicture.c | 17 +++++++++++++++-- dlls/oleaut32/tests/olepicture.c | 6 ------ 2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c index 0ea65cf5430..d7059382a3d 100644 --- a/dlls/oleaut32/olepicture.c +++ b/dlls/oleaut32/olepicture.c @@ -2009,9 +2009,22 @@ static HRESULT WINAPI OLEPictureImpl_SaveAsFile(IPicture *iface, case PICTYPE_METAFILE: FIXME("PICTYPE_METAFILE is not implemented\n"); return E_NOTIMPL; + case PICTYPE_ENHMETAFILE: - FIXME("ENHMETAFILE is not implemented\n"); - return E_NOTIMPL; + if (!mem_copy) return E_FAIL; + + if (This->bIsDirty || !This->data) + { + hr = serializeEMF(This->desc.emf.hemf, &data, &data_size); + if (hr != S_OK) return hr; + HeapFree(GetProcessHeap(), 0, This->data); + This->data = data; + This->datalen = data_size; + } + hr = IStream_Write(stream, This->data, This->datalen, &written); + if (hr == S_OK && size) *size = written; + return hr; + default: FIXME("%#x is not implemented\n", This->desc.picType); break; diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c index 2f909503462..58d5577631c 100644 --- a/dlls/oleaut32/tests/olepicture.c +++ b/dlls/oleaut32/tests/olepicture.c @@ -1651,21 +1651,15 @@ static void test_load_save_emf(void)
size = -1; hr = IPicture_SaveAsFile(pic, dst_stream, TRUE, &size); - todo_wine ok(hr == S_OK, "IPicture_SaveasFile error %#lx\n", hr); - todo_wine ok(size == 128, "expected 128, got %ld\n", size); emh = GlobalLock(hmem); - if (size > 0) - { ok(emh->iType == EMR_HEADER, "wrong iType %04lx\n", emh->iType); ok(emh->dSignature == ENHMETA_SIGNATURE, "wrong dSignature %08lx\n", emh->dSignature); - } GlobalUnlock(hmem);
size = -1; hr = IPicture_SaveAsFile(pic, dst_stream, FALSE, &size); - todo_wine ok(hr == E_FAIL, "expected E_FAIL, got %#lx\n", hr); ok(size == -1, "expected -1, got %ld\n", size);