ReactOS 0.4.16-dev-2354-g16de117
ole2.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "objbase.h"
#include "shlguid.h"
#include "wine/test.h"
Include dependency graph for ole2.c:

Go to the source code of this file.

Classes

struct  expected_method
 
struct  PresentationDataHeader
 
struct  stream_def
 
struct  storage_def
 

Macros

#define COBJMACROS
 
#define CONST_VTABLE
 
#define WIN32_LEAN_AND_MEAN
 
#define ok_ole_success(hr, func)   ok(hr == S_OK, func " failed with error %#08lx\n", hr)
 
#define DEFINE_EXPECT(func)    static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
 
#define SET_EXPECT(func)    expect_ ## func = TRUE
 
#define CHECK_EXPECT2(func)
 
#define CHECK_EXPECT(func)
 
#define CHECK_CALLED(func)
 
#define TEST_TODO   0x2
 
#define CHECK_EXPECTED_METHOD(method_name)   check_expected_method_fmt(method_name, NULL)
 
#define CHECK_EXPECTED_METHOD_FMT(method_name, fmt)   check_expected_method_fmt(method_name, fmt)
 
#define CHECK_NO_EXTRA_METHODS()
 
#define MAX_STREAM   16
 
#define MAX_FMTS   5
 

Typedefs

typedef struct PresentationDataHeader PresentationDataHeader
 

Functions

 DEFINE_EXPECT (Storage_Stat)
 
 DEFINE_EXPECT (Storage_OpenStream_CompObj)
 
 DEFINE_EXPECT (Storage_OpenStream_OlePres)
 
 DEFINE_EXPECT (Storage_SetClass)
 
 DEFINE_EXPECT (Storage_CreateStream_CompObj)
 
 DEFINE_EXPECT (Storage_CreateStream_OlePres)
 
 DEFINE_EXPECT (Storage_OpenStream_Ole)
 
 DEFINE_EXPECT (Storage_DestroyElement)
 
static void check_expected_method_fmt (const char *method_name, const FORMATETC *fmt)
 
static void create_dib (STGMEDIUM *med)
 
static void create_bitmap (STGMEDIUM *med)
 
static void create_emf (STGMEDIUM *med)
 
static void create_mfpict (STGMEDIUM *med)
 
static void create_text (STGMEDIUM *med)
 
static HRESULT WINAPI OleObject_QueryInterface (IOleObject *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI OleObject_AddRef (IOleObject *iface)
 
static ULONG WINAPI OleObject_Release (IOleObject *iface)
 
static HRESULT WINAPI OleObject_SetClientSite (IOleObject *iface, IOleClientSite *pClientSite)
 
static HRESULT WINAPI OleObject_GetClientSite (IOleObject *iface, IOleClientSite **ppClientSite)
 
static HRESULT WINAPI OleObject_SetHostNames (IOleObject *iface, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
 
static HRESULT WINAPI OleObject_Close (IOleObject *iface, DWORD dwSaveOption)
 
static HRESULT WINAPI OleObject_SetMoniker (IOleObject *iface, DWORD dwWhichMoniker, IMoniker *pmk)
 
static HRESULT WINAPI OleObject_GetMoniker (IOleObject *iface, DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
 
static HRESULT WINAPI OleObject_InitFromData (IOleObject *iface, IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved)
 
static HRESULT WINAPI OleObject_GetClipboardData (IOleObject *iface, DWORD dwReserved, IDataObject **ppDataObject)
 
static HRESULT WINAPI OleObject_DoVerb (IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
 
static HRESULT WINAPI OleObject_EnumVerbs (IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
 
static HRESULT WINAPI OleObject_Update (IOleObject *iface)
 
static HRESULT WINAPI OleObject_IsUpToDate (IOleObject *iface)
 
static HRESULT WINAPI OleObject_GetUserClassID (IOleObject *iface, CLSID *pClsid)
 
static HRESULT WINAPI OleObject_GetUserType (IOleObject *iface, DWORD dwFormOfType, LPOLESTR *pszUserType)
 
static HRESULT WINAPI OleObject_SetExtent (IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
 
static HRESULT WINAPI OleObject_GetExtent (IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
 
static HRESULT WINAPI OleObject_Advise (IOleObject *iface, IAdviseSink *pAdvSink, DWORD *pdwConnection)
 
static HRESULT WINAPI OleObject_Unadvise (IOleObject *iface, DWORD dwConnection)
 
static HRESULT WINAPI OleObject_EnumAdvise (IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
 
static HRESULT WINAPI OleObject_GetMiscStatus (IOleObject *iface, DWORD aspect, DWORD *pdwStatus)
 
static HRESULT WINAPI OleObject_SetColorScheme (IOleObject *iface, LOGPALETTE *pLogpal)
 
static HRESULT WINAPI OleObjectPersistStg_QueryInterface (IPersistStorage *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI OleObjectPersistStg_AddRef (IPersistStorage *iface)
 
static ULONG WINAPI OleObjectPersistStg_Release (IPersistStorage *iface)
 
static HRESULT WINAPI OleObjectPersistStg_GetClassId (IPersistStorage *iface, CLSID *clsid)
 
static HRESULT WINAPI OleObjectPersistStg_IsDirty (IPersistStorage *iface)
 
static HRESULT WINAPI OleObjectPersistStg_InitNew (IPersistStorage *iface, IStorage *pStg)
 
static HRESULT WINAPI OleObjectPersistStg_Load (IPersistStorage *iface, IStorage *pStg)
 
static HRESULT WINAPI OleObjectPersistStg_Save (IPersistStorage *iface, IStorage *pStgSave, BOOL fSameAsLoad)
 
static HRESULT WINAPI OleObjectPersistStg_SaveCompleted (IPersistStorage *iface, IStorage *pStgNew)
 
static HRESULT WINAPI OleObjectPersistStg_HandsOffStorage (IPersistStorage *iface)
 
static HRESULT WINAPI OleObjectCache_QueryInterface (IOleCache *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI OleObjectCache_AddRef (IOleCache *iface)
 
static ULONG WINAPI OleObjectCache_Release (IOleCache *iface)
 
static HRESULT WINAPI OleObjectCache_Cache (IOleCache *iface, FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection)
 
static HRESULT WINAPI OleObjectCache_Uncache (IOleCache *iface, DWORD dwConnection)
 
static HRESULT WINAPI OleObjectCache_EnumCache (IOleCache *iface, IEnumSTATDATA **ppenumSTATDATA)
 
static HRESULT WINAPI OleObjectCache_InitCache (IOleCache *iface, IDataObject *pDataObject)
 
static HRESULT WINAPI OleObjectCache_SetData (IOleCache *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
 
static HRESULT WINAPI OleObjectCF_QueryInterface (IClassFactory *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI OleObjectCF_AddRef (IClassFactory *iface)
 
static ULONG WINAPI OleObjectCF_Release (IClassFactory *iface)
 
static HRESULT WINAPI OleObjectCF_CreateInstance (IClassFactory *iface, IUnknown *punkOuter, REFIID riid, void **ppv)
 
static HRESULT WINAPI OleObjectCF_LockServer (IClassFactory *iface, BOOL lock)
 
static HRESULT WINAPI OleObjectRunnable_QueryInterface (IRunnableObject *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI OleObjectRunnable_AddRef (IRunnableObject *iface)
 
static ULONG WINAPI OleObjectRunnable_Release (IRunnableObject *iface)
 
static HRESULT WINAPI OleObjectRunnable_GetRunningClass (IRunnableObject *iface, LPCLSID lpClsid)
 
static HRESULT WINAPI OleObjectRunnable_Run (IRunnableObject *iface, LPBINDCTX pbc)
 
static BOOL WINAPI OleObjectRunnable_IsRunning (IRunnableObject *iface)
 
static HRESULT WINAPI OleObjectRunnable_LockRunning (IRunnableObject *iface, BOOL fLock, BOOL fLastUnlockCloses)
 
static HRESULT WINAPI OleObjectRunnable_SetContainedObject (IRunnableObject *iface, BOOL fContained)
 
static HRESULT WINAPI viewobject_QueryInterface (IViewObject *iface, REFIID riid, void **obj)
 
static ULONG WINAPI viewobject_AddRef (IViewObject *iface)
 
static ULONG WINAPI viewobject_Release (IViewObject *iface)
 
static HRESULT WINAPI viewobject_Draw (IViewObject *iface, DWORD aspect, LONG index, void *paspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL bounds, LPCRECTL wbounds, BOOL(STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue)
 
static HRESULT WINAPI viewobject_GetColorSet (IViewObject *iface, DWORD draw_aspect, LONG index, void *aspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **colorset)
 
static HRESULT WINAPI viewobject_Freeze (IViewObject *iface, DWORD draw_aspect, LONG index, void *aspect, DWORD *freeze)
 
static HRESULT WINAPI viewobject_Unfreeze (IViewObject *iface, DWORD freeze)
 
static HRESULT WINAPI viewobject_SetAdvise (IViewObject *iface, DWORD aspects, DWORD advf, IAdviseSink *sink)
 
static HRESULT WINAPI viewobject_GetAdvise (IViewObject *iface, DWORD *aspects, DWORD *advf, IAdviseSink **sink)
 
static void test_OleCreate (IStorage *pStorage)
 
static void test_OleLoad (IStorage *pStorage)
 
static BOOL STDMETHODCALLTYPE draw_continue (ULONG_PTR param)
 
static BOOL STDMETHODCALLTYPE draw_continue_false (ULONG_PTR param)
 
static HRESULT WINAPI AdviseSink_QueryInterface (IAdviseSink *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI AdviseSink_AddRef (IAdviseSink *iface)
 
static ULONG WINAPI AdviseSink_Release (IAdviseSink *iface)
 
static void WINAPI AdviseSink_OnDataChange (IAdviseSink *iface, FORMATETC *pFormatetc, STGMEDIUM *pStgmed)
 
static void WINAPI AdviseSink_OnViewChange (IAdviseSink *iface, DWORD dwAspect, LONG lindex)
 
static void WINAPI AdviseSink_OnRename (IAdviseSink *iface, IMoniker *pmk)
 
static void WINAPI AdviseSink_OnSave (IAdviseSink *iface)
 
static void WINAPI AdviseSink_OnClose (IAdviseSink *iface)
 
static HRESULT WINAPI DataObject_QueryInterface (IDataObject *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI DataObject_AddRef (IDataObject *iface)
 
static ULONG WINAPI DataObject_Release (IDataObject *iface)
 
static BOOL fmtetc_equal (const FORMATETC *a, const FORMATETC *b)
 
static HRESULT WINAPI DataObject_GetData (IDataObject *iface, FORMATETC *format, STGMEDIUM *medium)
 
static HRESULT WINAPI DataObject_GetDataHere (IDataObject *iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium)
 
static HRESULT WINAPI DataObject_QueryGetData (IDataObject *iface, FORMATETC *format)
 
static HRESULT WINAPI DataObject_GetCanonicalFormatEtc (IDataObject *iface, LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut)
 
static HRESULT WINAPI DataObject_SetData (IDataObject *iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
 
static HRESULT WINAPI DataObject_EnumFormatEtc (IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
 
static HRESULT WINAPI DataObject_DAdvise (IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
 
static HRESULT WINAPI DataObject_DUnadvise (IDataObject *iface, DWORD dwConnection)
 
static HRESULT WINAPI DataObject_EnumDAdvise (IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
 
static HRESULT WINAPI Unknown_QueryInterface (IUnknown *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI Unknown_AddRef (IUnknown *iface)
 
static ULONG WINAPI Unknown_Release (IUnknown *iface)
 
static void check_enum_cache (IOleCache2 *cache, const STATDATA *expect, int num)
 
static void test_data_cache (void)
 
static IStoragecreate_storage (int num)
 
static void test_data_cache_dib_contents_stream (int num)
 
static void check_bitmap_size (HBITMAP h, int cx, int cy)
 
static void check_dib_size (HGLOBAL h, int cx, int cy)
 
static void test_data_cache_cache (void)
 
static void test_data_cache_init (void)
 
static void test_data_cache_initnew (void)
 
static BOOL compare_global (HGLOBAL handle, const void *data, SIZE_T size)
 
static void test_data_cache_updatecache (void)
 
static void test_default_handler (void)
 
static void test_runnable (void)
 
static HRESULT WINAPI OleRun_QueryInterface (IRunnableObject *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI OleRun_AddRef (IRunnableObject *iface)
 
static ULONG WINAPI OleRun_Release (IRunnableObject *iface)
 
static HRESULT WINAPI OleRun_GetRunningClass (IRunnableObject *iface, CLSID *clsid)
 
static HRESULT WINAPI OleRun_Run (IRunnableObject *iface, LPBINDCTX ctx)
 
static BOOL WINAPI OleRun_IsRunning (IRunnableObject *iface)
 
static HRESULT WINAPI OleRun_LockRunning (IRunnableObject *iface, BOOL lock, BOOL last_unlock_closes)
 
static HRESULT WINAPI OleRun_SetContainedObject (IRunnableObject *iface, BOOL contained)
 
static void test_OleRun (void)
 
static void test_OleLockRunning (void)
 
static void test_OleDraw (void)
 
static HRESULT WINAPI Storage_QueryInterface (IStorage *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI Storage_AddRef (IStorage *iface)
 
static ULONG WINAPI Storage_Release (IStorage *iface)
 
static HRESULT WINAPI Storage_CreateStream (IStorage *iface, LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream **ppstm)
 
static HRESULT WINAPI Storage_OpenStream (IStorage *iface, LPCOLESTR pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream **ppstm)
 
static HRESULT WINAPI Storage_CreateStorage (IStorage *iface, LPCOLESTR pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage **ppstg)
 
static HRESULT WINAPI Storage_OpenStorage (IStorage *iface, LPCOLESTR pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstg)
 
static HRESULT WINAPI Storage_CopyTo (IStorage *iface, DWORD ciidExclude, const IID *rgiidExclude, SNB snbExclude, IStorage *pstgDest)
 
static HRESULT WINAPI Storage_MoveElementTo (IStorage *iface, LPCOLESTR pwcsName, IStorage *pstgDest, LPCOLESTR pwcsNewName, DWORD grfFlags)
 
static HRESULT WINAPI Storage_Commit (IStorage *iface, DWORD grfCommitFlags)
 
static HRESULT WINAPI Storage_Revert (IStorage *iface)
 
static HRESULT WINAPI Storage_EnumElements (IStorage *iface, DWORD reserved1, void *reserved2, DWORD reserved3, IEnumSTATSTG **ppenum)
 
static HRESULT WINAPI Storage_DestroyElement (IStorage *iface, LPCOLESTR pwcsName)
 
static HRESULT WINAPI Storage_RenameElement (IStorage *iface, LPCOLESTR pwcsOldName, LPCOLESTR pwcsNewName)
 
static HRESULT WINAPI Storage_SetElementTimes (IStorage *iface, LPCOLESTR pwcsName, const FILETIME *pctime, const FILETIME *patime, const FILETIME *pmtime)
 
static HRESULT WINAPI Storage_SetClass (IStorage *iface, REFCLSID clsid)
 
static HRESULT WINAPI Storage_SetStateBits (IStorage *iface, DWORD grfStateBits, DWORD grfMask)
 
static HRESULT WINAPI Storage_Stat (IStorage *iface, STATSTG *pstatstg, DWORD grfStatFlag)
 
static void test_OleDoAutoConvert (void)
 
static void test_data_cache_save (void)
 
static int read_clipformat (IStream *stream)
 
static void check_storage_contents (IStorage *stg, const struct storage_def *stg_def, int *enumerated_streams, int *matched_streams)
 
static HRESULT stgmedium_cmp (const STGMEDIUM *med1, STGMEDIUM *med2)
 
static IStoragecreate_storage_from_def (const struct storage_def *stg_def)
 
static void get_stgdef (struct storage_def *stg_def, CLIPFORMAT cf, STGMEDIUM *stg_med, int stm_idx)
 
static void get_stgmedium (CLIPFORMAT cfFormat, STGMEDIUM *stgmedium)
 
static void test_data_cache_save_data (void)
 
static void test_data_cache_contents (void)
 
static void test_OleCreateStaticFromData (void)
 
static void test_ReleaseStgMedium (void)
 
 START_TEST (ole2)
 

Variables

static const CLSIDStorage_SetClass_CLSID
 
static int Storage_DestroyElement_limit
 
static IPersistStorage OleObjectPersistStg = { &OleObjectPersistStgVtbl }
 
static IOleCachecache
 
static IRunnableObjectrunnable
 
static const CLSID CLSID_WineTestOld
 
static const CLSID CLSID_WineTest
 
static const IID IID_WineTest
 
static const struct expected_methodexpected_method_list
 
static FORMATETC * g_expected_fetc = NULL
 
static BOOL g_showRunnable = TRUE
 
static BOOL g_isRunning = TRUE
 
static HRESULT g_GetMiscStatusFailsWith = S_OK
 
static HRESULT g_QIFailsWith
 
static UINT cf_test_1
 
static UINT cf_test_2
 
static UINT cf_test_3
 
static FORMATETC * data_object_format
 
static const BYTEdata_object_dib
 
static const BYTE dib_white []
 
static const BYTE dib_black []
 
static LONG ole_object_refcount
 
static const IOleObjectVtbl OleObjectVtbl
 
static IOleObject OleObject = { &OleObjectVtbl }
 
static const IPersistStorageVtbl OleObjectPersistStgVtbl
 
static const IOleCacheVtbl OleObjectCacheVtbl
 
static IOleCache OleObjectCache = { &OleObjectCacheVtbl }
 
static const IClassFactoryVtbl OleObjectCFVtbl
 
static IClassFactory OleObjectCF = { &OleObjectCFVtbl }
 
static const IRunnableObjectVtbl OleObjectRunnableVtbl
 
static IRunnableObject OleObjectRunnable = { &OleObjectRunnableVtbl }
 
static const CLSID CLSID_Equation3 = {0x0002CE02, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} }
 
static const struct IViewObjectVtbl viewobjectvtbl
 
static IViewObject viewobject = { &viewobjectvtbl }
 
static const IAdviseSinkVtbl AdviseSinkVtbl
 
static IAdviseSink AdviseSink = { &AdviseSinkVtbl }
 
static IDataObjectVtbl DataObjectVtbl
 
static IDataObject DataObject = { &DataObjectVtbl }
 
static const IUnknownVtbl UnknownVtbl
 
static IUnknown unknown = { &UnknownVtbl }
 
static const WCHAR CONTENTS [] = {'C','O','N','T','E','N','T','S',0}
 
static BYTE file_dib []
 
static const IRunnableObjectVtbl oleruntestvtbl
 
static IRunnableObject testrunnable = { &oleruntestvtbl }
 
static const WCHAR olepres0W [] = {2,'O','l','e','P','r','e','s','0','0','0',0}
 
static const WCHAR comp_objW [] = {1,'C','o','m','p','O','b','j',0}
 
static IStreamcomp_obj_stream
 
static IStreamole_stream
 
static IStreamolepres_stream
 
static IStreamcontents_stream
 
static IStorageVtbl StorageVtbl
 
static IStorage Storage = { &StorageVtbl }
 
static const unsigned char bmpimage []
 
static const unsigned char mf_blank_bits []
 
static const struct storage_def stg_def_0
 
static const struct storage_def stg_def_0_saved
 
static const struct storage_def stg_def_1
 
static const struct storage_def stg_def_1_saved
 
static const struct storage_def stg_def_2
 
static const struct storage_def stg_def_2_saved
 
static const struct storage_def stg_def_3
 
static const struct storage_def stg_def_3_saved
 
static const struct storage_def stg_def_4
 
static const struct storage_def stg_def_4_saved
 
static const struct storage_def stg_def_5
 
static const struct storage_def stg_def_5_saved
 
static const struct storage_def stg_def_6
 
static const struct storage_def stg_def_6_saved
 
static const struct storage_def stg_def_7
 
static const struct storage_def stg_def_7_saved
 
static const struct storage_def stg_def_8
 
static const struct storage_def stg_def_8_saved
 
static const struct storage_def stg_def_9
 
static const struct storage_def stg_def_9_saved
 
static const BYTE dib_inf []
 
static const BYTE mf_rec []
 

Macro Definition Documentation

◆ CHECK_CALLED

#define CHECK_CALLED (   func)
Value:
do { \
ok(called_ ## func, "expected " #func "\n"); \
expect_ ## func = called_ ## func = FALSE; \
}while(0)
#define FALSE
Definition: types.h:117
GLenum func
Definition: glext.h:6028
#define expect_(expected, got, precision)
Definition: font.c:29

Definition at line 56 of file ole2.c.

◆ CHECK_EXPECT

#define CHECK_EXPECT (   func)
Value:
do { \
CHECK_EXPECT2(func); \
expect_ ## func = FALSE; \
}while(0)

Definition at line 50 of file ole2.c.

◆ CHECK_EXPECT2

#define CHECK_EXPECT2 (   func)
Value:
do { \
ok(expect_ ##func, "unexpected call " #func "\n"); \
called_ ## func = TRUE; \
}while(0)
#define TRUE
Definition: types.h:120

Definition at line 44 of file ole2.c.

◆ CHECK_EXPECTED_METHOD

#define CHECK_EXPECTED_METHOD (   method_name)    check_expected_method_fmt(method_name, NULL)

Definition at line 182 of file ole2.c.

◆ CHECK_EXPECTED_METHOD_FMT

#define CHECK_EXPECTED_METHOD_FMT (   method_name,
  fmt 
)    check_expected_method_fmt(method_name, fmt)

Definition at line 183 of file ole2.c.

◆ CHECK_NO_EXTRA_METHODS

#define CHECK_NO_EXTRA_METHODS ( )
Value:
do { \
ok(!expected_method_list->method, "Method sequence starting from %s not called\n", expected_method_list->method); \
} while (0)
static const struct expected_method * expected_method_list
Definition: ole2.c:111

Definition at line 185 of file ole2.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file ole2.c.

◆ CONST_VTABLE

#define CONST_VTABLE

Definition at line 23 of file ole2.c.

◆ DEFINE_EXPECT

#define DEFINE_EXPECT (   func)     static BOOL expect_ ## func = FALSE, called_ ## func = FALSE

Definition at line 38 of file ole2.c.

◆ MAX_FMTS

#define MAX_FMTS   5

Definition at line 4205 of file ole2.c.

◆ MAX_STREAM

#define MAX_STREAM   16

Definition at line 3698 of file ole2.c.

◆ ok_ole_success

#define ok_ole_success (   hr,
  func 
)    ok(hr == S_OK, func " failed with error %#08lx\n", hr)

Definition at line 36 of file ole2.c.

◆ SET_EXPECT

#define SET_EXPECT (   func)     expect_ ## func = TRUE

Definition at line 41 of file ole2.c.

◆ TEST_TODO

#define TEST_TODO   0x2

Definition at line 102 of file ole2.c.

◆ WIN32_LEAN_AND_MEAN

#define WIN32_LEAN_AND_MEAN

Definition at line 24 of file ole2.c.

Typedef Documentation

◆ PresentationDataHeader

Function Documentation

◆ AdviseSink_AddRef()

static ULONG WINAPI AdviseSink_AddRef ( IAdviseSink iface)
static

Definition at line 1276 of file ole2.c.

1277{
1278 return 2;
1279}

◆ AdviseSink_OnClose()

static void WINAPI AdviseSink_OnClose ( IAdviseSink iface)
static

Definition at line 1315 of file ole2.c.

1316{
1317 CHECK_EXPECTED_METHOD("AdviseSink_OnClose");
1318}
#define CHECK_EXPECTED_METHOD(method_name)
Definition: ole2.c:182

◆ AdviseSink_OnDataChange()

static void WINAPI AdviseSink_OnDataChange ( IAdviseSink iface,
FORMATETC *  pFormatetc,
STGMEDIUM *  pStgmed 
)
static

Definition at line 1287 of file ole2.c.

1291{
1292 CHECK_EXPECTED_METHOD("AdviseSink_OnDataChange");
1293}

◆ AdviseSink_OnRename()

static void WINAPI AdviseSink_OnRename ( IAdviseSink iface,
IMoniker pmk 
)
static

Definition at line 1303 of file ole2.c.

1306{
1307 CHECK_EXPECTED_METHOD("AdviseSink_OnRename");
1308}

◆ AdviseSink_OnSave()

static void WINAPI AdviseSink_OnSave ( IAdviseSink iface)
static

Definition at line 1310 of file ole2.c.

1311{
1312 CHECK_EXPECTED_METHOD("AdviseSink_OnSave");
1313}

◆ AdviseSink_OnViewChange()

static void WINAPI AdviseSink_OnViewChange ( IAdviseSink iface,
DWORD  dwAspect,
LONG  lindex 
)
static

Definition at line 1295 of file ole2.c.

1299{
1300 CHECK_EXPECTED_METHOD("AdviseSink_OnViewChange");
1301}

◆ AdviseSink_QueryInterface()

static HRESULT WINAPI AdviseSink_QueryInterface ( IAdviseSink iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1264 of file ole2.c.

1265{
1267 {
1268 *ppv = iface;
1269 IAdviseSink_AddRef(iface);
1270 return S_OK;
1271 }
1272 *ppv = NULL;
1273 return E_NOINTERFACE;
1274}
const GUID IID_IUnknown
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
const GUID IID_IAdviseSink
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ AdviseSink_Release()

static ULONG WINAPI AdviseSink_Release ( IAdviseSink iface)
static

Definition at line 1281 of file ole2.c.

1282{
1283 return 1;
1284}

◆ check_bitmap_size()

static void check_bitmap_size ( HBITMAP  h,
int  cx,
int  cy 
)
static

Definition at line 2084 of file ole2.c.

2085{
2086 BITMAP bm;
2087
2088 GetObjectW( h, sizeof(bm), &bm );
2089 ok( bm.bmWidth == cx, "got %d expect %d\n", bm.bmWidth, cx );
2090 ok( bm.bmHeight == cy, "got %d expect %d\n", bm.bmHeight, cy );
2091}
#define ok(value,...)
Definition: atltest.h:57
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
LONG bmHeight
Definition: wingdi.h:1869
LONG bmWidth
Definition: wingdi.h:1868
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)

Referenced by test_data_cache_cache().

◆ check_dib_size()

static void check_dib_size ( HGLOBAL  h,
int  cx,
int  cy 
)
static

Definition at line 2093 of file ole2.c.

2094{
2096
2097 info = GlobalLock( h );
2098 ok( info->bmiHeader.biWidth == cx, "got %ld expect %d\n", info->bmiHeader.biWidth, cx );
2099 ok( info->bmiHeader.biHeight == cy, "got %ld expect %d\n", info->bmiHeader.biHeight, cy );
2100 GlobalUnlock( h );
2101}
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
static ERESOURCE GlobalLock
Definition: sys_arch.c:8

Referenced by test_data_cache_cache().

◆ check_enum_cache()

static void check_enum_cache ( IOleCache2 cache,
const STATDATA *  expect,
int  num 
)
static

Definition at line 1534 of file ole2.c.

1535{
1536 IEnumSTATDATA *enum_stat;
1537 STATDATA stat;
1538 HRESULT hr;
1539
1540 hr = IOleCache2_EnumCache( cache, &enum_stat );
1541 ok( hr == S_OK, "got %08lx\n", hr );
1542
1543 while (IEnumSTATDATA_Next(enum_stat, 1, &stat, NULL) == S_OK)
1544 {
1545 ok( stat.formatetc.cfFormat == expect->formatetc.cfFormat, "got %d expect %d\n",
1546 stat.formatetc.cfFormat, expect->formatetc.cfFormat );
1547 ok( !stat.formatetc.ptd == !expect->formatetc.ptd, "got %p expect %p\n",
1548 stat.formatetc.ptd, expect->formatetc.ptd );
1549 ok( stat.formatetc.dwAspect == expect->formatetc.dwAspect, "got %ld expect %ld\n",
1550 stat.formatetc.dwAspect, expect->formatetc.dwAspect );
1551 ok( stat.formatetc.lindex == expect->formatetc.lindex, "got %ld expect %ld\n",
1552 stat.formatetc.lindex, expect->formatetc.lindex );
1553 ok( stat.formatetc.tymed == expect->formatetc.tymed, "got %ld expect %ld\n",
1554 stat.formatetc.tymed, expect->formatetc.tymed );
1555 ok( stat.advf == expect->advf, "got %ld expect %ld\n", stat.advf, expect->advf );
1556 ok( stat.pAdvSink == 0, "got %p\n", stat.pAdvSink );
1557 ok( stat.dwConnection == expect->dwConnection, "got %ld expect %ld\n", stat.dwConnection, expect->dwConnection );
1558 num--;
1559 expect++;
1560 }
1561
1562 ok( num == 0, "incorrect number. num %d\n", num );
1563
1564 IEnumSTATDATA_Release( enum_stat );
1565}
#define expect(EXPECTED, GOT)
Definition: SystemMenu.c:483
#define stat
Definition: acwin.h:99
GLuint GLuint num
Definition: glext.h:9618
HRESULT hr
Definition: shlfolder.c:183
Definition: cache.c:49
Definition: stat.h:66

Referenced by test_data_cache_cache(), test_data_cache_dib_contents_stream(), test_data_cache_init(), test_data_cache_initnew(), and test_data_cache_updatecache().

◆ check_expected_method_fmt()

static void check_expected_method_fmt ( const char method_name,
const FORMATETC *  fmt 
)
inlinestatic

Definition at line 154 of file ole2.c.

156{
157 if (winetest_debug > 1) trace("%s\n", method_name);
158 ok(expected_method_list->method != NULL, "Extra method %s called\n", method_name);
159 if (expected_method_list->method)
160 {
162 {
163 ok(!strcmp(expected_method_list->method, method_name),
164 "Expected %s to be called instead of %s\n",
165 expected_method_list->method, method_name);
166 if (fmt)
167 {
168 ok(fmt->cfFormat == expected_method_list->fmt.cfFormat, "got cf %04x vs %04x\n",
169 fmt->cfFormat, expected_method_list->fmt.cfFormat );
170 ok(fmt->dwAspect == expected_method_list->fmt.dwAspect, "got aspect %ld vs %ld\n",
171 fmt->dwAspect, expected_method_list->fmt.dwAspect );
172 ok(fmt->lindex == expected_method_list->fmt.lindex, "got lindex %ld vs %ld\n",
173 fmt->lindex, expected_method_list->fmt.lindex );
174 ok(fmt->tymed == expected_method_list->fmt.tymed, "got tymed %ld vs %ld\n",
175 fmt->tymed, expected_method_list->fmt.tymed );
176 }
177 }
179 }
180}
#define trace
Definition: atltest.h:70
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3319
int winetest_debug
#define todo_wine_if(is_todo)
Definition: minitest.h:81
#define TEST_TODO
Definition: ole2.c:102
Definition: dsound.c:943

◆ check_storage_contents()

static void check_storage_contents ( IStorage stg,
const struct storage_def stg_def,
int enumerated_streams,
int matched_streams 
)
static

Definition at line 3857 of file ole2.c.

3859{
3860 HRESULT hr;
3861 IEnumSTATSTG *enumstg;
3862 IStream *stream;
3863 STATSTG stat;
3864 int i, seen_stream[MAX_STREAM] = { 0 };
3865
3866 if (winetest_debug > 1)
3867 trace("check_storage_contents:\n=============================================\n");
3868
3869 *enumerated_streams = 0;
3870 *matched_streams = 0;
3871
3872 hr = IStorage_Stat(stg, &stat, STATFLAG_NONAME);
3873 ok(hr == S_OK, "unexpected %#lx\n", hr);
3874 ok(IsEqualCLSID(stg_def->clsid, &stat.clsid), "expected %s, got %s\n",
3875 wine_dbgstr_guid(stg_def->clsid), wine_dbgstr_guid(&stat.clsid));
3876
3877 hr = IStorage_EnumElements(stg, 0, NULL, 0, &enumstg);
3878 ok(hr == S_OK, "unexpected %#lx\n", hr);
3879
3880 for (;;)
3881 {
3882 ULONG bytes;
3883 int clipformat = -1;
3885 char name[32];
3886 BYTE data[1024];
3887
3888 memset(&header, 0, sizeof(header));
3889
3890 hr = IEnumSTATSTG_Next(enumstg, 1, &stat, NULL);
3891 if(hr == S_FALSE) break;
3892 ok(hr == S_OK, "unexpected %#lx\n", hr);
3893
3894 if (winetest_debug > 1)
3895 trace("name %s, type %lu, size %ld, clsid %s\n",
3896 wine_dbgstr_w(stat.pwcsName), stat.type, stat.cbSize.u.LowPart, wine_dbgstr_guid(&stat.clsid));
3897
3898 ok(stat.type == STGTY_STREAM, "unexpected %#lx\n", stat.type);
3899
3900 WideCharToMultiByte(CP_ACP, 0, stat.pwcsName, -1, name, sizeof(name), NULL, NULL);
3901
3902 hr = IStorage_OpenStream(stg, stat.pwcsName, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stream);
3903 ok(hr == S_OK, "unexpected %#lx\n", hr);
3904
3905 if (!memcmp(name, "\2OlePres", 8))
3906 {
3907 ULONG header_size = sizeof(header);
3908
3909 clipformat = read_clipformat(stream);
3910
3911 if (clipformat == 0) /* view cache */
3912 header_size = FIELD_OFFSET(PresentationDataHeader, unknown7);
3913
3914 hr = IStream_Read(stream, &header, header_size, &bytes);
3915 ok(hr == S_OK, "unexpected %#lx\n", hr);
3916 ok(bytes == header_size, "read %lu bytes, expected %lu\n", bytes, header_size);
3917
3918 if (winetest_debug > 1)
3919 trace("header: tdSize %#lx, dvAspect %#x, lindex %#lx, advf %#lx, unknown7 %#lx, dwObjectExtentX %#lx, dwObjectExtentY %#lx, dwSize %#lx\n",
3920 header.tdSize, header.dvAspect, header.lindex, header.advf, header.unknown7,
3921 header.dwObjectExtentX, header.dwObjectExtentY, header.dwSize);
3922 }
3923
3924 memset(data, 0, sizeof(data));
3925 hr = IStream_Read(stream, data, sizeof(data), &bytes);
3926 ok(hr == S_OK, "unexpected %#lx\n", hr);
3927 if (winetest_debug > 1)
3928 trace("stream data (%lu bytes): %02x %02x %02x %02x\n", bytes, data[0], data[1], data[2], data[3]);
3929
3930 for (i = 0; i < stg_def->stream_count; i++)
3931 {
3932 if (seen_stream[i]) continue;
3933
3934 if (winetest_debug > 1)
3935 trace("%s/%s, %d/%d, %d/%d, %d/%ld\n",
3936 stg_def->stream[i].name, name,
3937 stg_def->stream[i].cf, clipformat,
3938 stg_def->stream[i].dvAspect, header.dvAspect,
3939 stg_def->stream[i].advf, header.advf);
3940
3941 if (!strcmp(stg_def->stream[i].name, name) &&
3942 stg_def->stream[i].cf == clipformat &&
3943 stg_def->stream[i].dvAspect == header.dvAspect &&
3944 stg_def->stream[i].advf == header.advf &&
3945 stg_def->stream[i].data_size <= bytes &&
3946 (!stg_def->stream[i].data_size ||
3947 (!memcmp(stg_def->stream[i].data, data, min(stg_def->stream[i].data_size, bytes)))))
3948 {
3949 if (winetest_debug > 1)
3950 trace("stream %d matches def stream %d\n", *enumerated_streams, i);
3951 seen_stream[i] = 1;
3952 *matched_streams += 1;
3953 }
3954 }
3955
3956 CoTaskMemFree(stat.pwcsName);
3957 IStream_Release(stream);
3958
3959 *enumerated_streams += 1;
3960 }
3961
3962 IEnumSTATSTG_Release(enumstg);
3963}
static unsigned char bytes[4]
Definition: adnsresfilter.c:74
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2802
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define wine_dbgstr_w
Definition: kernel32.h:34
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
#define MAX_STREAM
Definition: ole2.c:3698
static int read_clipformat(IStream *stream)
Definition: ole2.c:3834
#define min(a, b)
Definition: monoChain.cc:55
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:940
#define STGM_READ
Definition: objbase.h:934
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:206
#define memset(x, y, z)
Definition: compat.h:39
Definition: name.c:39
int stream_count
Definition: ole2.c:3713
const CLSID * clsid
Definition: ole2.c:3712
struct stream_def stream[MAX_STREAM]
Definition: ole2.c:3714
Definition: parse.h:23
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
uint32_t ULONG
Definition: typedefs.h:59
#define S_FALSE
Definition: winerror.h:3451
unsigned char BYTE
Definition: xxhash.c:193

Referenced by test_data_cache_contents(), test_data_cache_save_data(), and test_OleCreateStaticFromData().

◆ compare_global()

static BOOL compare_global ( HGLOBAL  handle,
const void data,
SIZE_T  size 
)
static

Definition at line 2515 of file ole2.c.

2516{
2517 const void *mem = GlobalLock(handle);
2520 return ret;
2521}
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
Definition: mem.c:349

Referenced by test_data_cache_updatecache().

◆ create_bitmap()

static void create_bitmap ( STGMEDIUM *  med)
static

Definition at line 222 of file ole2.c.

223{
224 med->tymed = TYMED_GDI;
225 med->hBitmap = CreateBitmap( 1, 1, 1, 1, NULL );
226 med->pUnkForRelease = NULL;
227}
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)

◆ create_dib()

static void create_dib ( STGMEDIUM *  med)
static

Definition at line 210 of file ole2.c.

211{
212 void *ptr;
213
214 med->tymed = TYMED_HGLOBAL;
215 med->hGlobal = GlobalAlloc(GMEM_MOVEABLE, sizeof(dib_white));
216 ptr = GlobalLock( med->hGlobal );
217 memcpy(ptr, dib_white, sizeof(dib_white));
218 GlobalUnlock( med->hGlobal );
219 med->pUnkForRelease = NULL;
220}
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
static const BYTE dib_white[]
Definition: ole2.c:190
#define GMEM_MOVEABLE
Definition: winbase.h:318

Referenced by get_stgmedium(), test_data_cache_cache(), and wined3d_texture_update_desc().

◆ create_emf()

static void create_emf ( STGMEDIUM *  med)
static

Definition at line 229 of file ole2.c.

230{
232
233 Rectangle(hdc, 0, 0, 150, 300);
234 med->tymed = TYMED_ENHMF;
235 med->hEnhMetaFile = CloseEnhMetaFile(hdc);
236 med->pUnkForRelease = NULL;
237}
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
HDC WINAPI CreateEnhMetaFileW(_In_opt_ HDC, _In_opt_ LPCWSTR, _In_opt_ LPCRECT, _In_opt_ LPCWSTR)
HENHMETAFILE WINAPI CloseEnhMetaFile(_In_ HDC hdc)
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)

◆ create_mfpict()

static void create_mfpict ( STGMEDIUM *  med)
static

Definition at line 239 of file ole2.c.

240{
241 METAFILEPICT *mf;
243
244 Rectangle(hdc, 0, 0, 100, 200);
245
246 med->tymed = TYMED_MFPICT;
247 med->hMetaFilePict = GlobalAlloc(GMEM_MOVEABLE, sizeof(METAFILEPICT));
248 mf = GlobalLock(med->hMetaFilePict);
249 mf->mm = MM_ANISOTROPIC;
250 mf->xExt = 100;
251 mf->yExt = 200;
252 mf->hMF = CloseMetaFile(hdc);
253 GlobalUnlock(med->hMetaFilePict);
254 med->pUnkForRelease = NULL;
255}
HMETAFILE hMF
Definition: wingdi.h:3054
#define MM_ANISOTROPIC
Definition: wingdi.h:867
HMETAFILE WINAPI CloseMetaFile(_In_ HDC hdc)
HDC WINAPI CreateMetaFileW(_In_opt_ LPCWSTR)

Referenced by DataObject_GetData(), and get_stgmedium().

◆ create_storage()

static IStorage * create_storage ( int  num)
static

Definition at line 1970 of file ole2.c.

1971{
1972 IStorage *stg;
1973 IStream *stm;
1974 HRESULT hr;
1975 ULONG written;
1976
1978 ok( hr == S_OK, "got %08lx\n", hr);
1979 hr = IStorage_SetClass( stg, &CLSID_Picture_Dib );
1980 ok( hr == S_OK, "got %08lx\n", hr);
1981 hr = IStorage_CreateStream( stg, CONTENTS, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, &stm );
1982 ok( hr == S_OK, "got %08lx\n", hr);
1983 if (num == 1) /* Set biXPelsPerMeter = 0 */
1984 {
1985 file_dib[0x26] = 0;
1986 file_dib[0x27] = 0;
1987 }
1988 hr = IStream_Write( stm, file_dib, sizeof(file_dib), &written );
1989 ok( hr == S_OK, "got %08lx\n", hr);
1990 IStream_Release( stm );
1991 return stg;
1992}
const CLSID CLSID_Picture_Dib
HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
Definition: storage32.c:8597
static BYTE file_dib[]
Definition: ole2.c:1958
static const WCHAR CONTENTS[]
Definition: ole2.c:1955
#define STGM_CREATE
Definition: objbase.h:943
#define STGM_READWRITE
Definition: objbase.h:936
#define STGM_DELETEONRELEASE
Definition: objbase.h:942

◆ create_storage_from_def()

static IStorage * create_storage_from_def ( const struct storage_def stg_def)
static

Definition at line 4042 of file ole2.c.

4043{
4044 HRESULT hr;
4045 IStorage *stg;
4046 IStream *stm;
4047 int i;
4048
4050 ok(hr == S_OK, "unexpected %#lx\n", hr);
4051
4052 hr = IStorage_SetClass(stg, stg_def->clsid);
4053 ok(hr == S_OK, "unexpected %#lx\n", hr);
4054
4055 for (i = 0; i < stg_def->stream_count; i++)
4056 {
4057 WCHAR name[32];
4058
4059 MultiByteToWideChar(CP_ACP, 0, stg_def->stream[i].name, -1, name, 32);
4060 hr = IStorage_CreateStream(stg, name, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
4061 ok(hr == S_OK, "unexpected %#lx\n", hr);
4062
4063 if (stg_def->stream[i].cf != -1)
4064 {
4065 int clipformat[2];
4067
4068 if (stg_def->stream[i].cf)
4069 {
4070 clipformat[0] = -1;
4071 clipformat[1] = stg_def->stream[i].cf;
4072 hr = IStream_Write(stm, clipformat, sizeof(clipformat), NULL);
4073 }
4074 else
4075 {
4076 clipformat[0] = 0;
4077 hr = IStream_Write(stm, &clipformat[0], sizeof(clipformat[0]), NULL);
4078 }
4079 ok(hr == S_OK, "unexpected %#lx\n", hr);
4080
4081 hdr.tdSize = sizeof(hdr.tdSize);
4082 hdr.dvAspect = stg_def->stream[i].dvAspect;
4083 hdr.lindex = -1;
4084 hdr.advf = stg_def->stream[i].advf;
4085 hdr.unknown7 = 0;
4086 hdr.dwObjectExtentX = 0;
4087 hdr.dwObjectExtentY = 0;
4088 hdr.dwSize = stg_def->stream[i].data_size;
4089 hr = IStream_Write(stm, &hdr, sizeof(hdr), NULL);
4090 ok(hr == S_OK, "unexpected %#lx\n", hr);
4091 }
4092
4093 if (stg_def->stream[i].data_size)
4094 {
4095 hr = IStream_Write(stm, stg_def->stream[i].data, stg_def->stream[i].data_size, NULL);
4096 ok(hr == S_OK, "unexpected %#lx\n", hr);
4097 }
4098
4099 IStream_Release(stm);
4100 }
4101
4102 return stg;
4103}
#define MultiByteToWideChar
Definition: compat.h:110
char hdr[14]
Definition: iptest.cpp:33
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by test_data_cache_contents().

◆ create_text()

static void create_text ( STGMEDIUM *  med)
static

Definition at line 257 of file ole2.c.

258{
260 char *p;
261
264 strcpy(p, "test");
266
267 med->tymed = TYMED_HGLOBAL;
268 med->hGlobal = handle;
269 med->pUnkForRelease = NULL;
270}
GLfloat GLfloat p
Definition: glext.h:8902
strcpy
Definition: string.h:131
#define GMEM_DDESHARE
Definition: winbase.h:322

◆ DataObject_AddRef()

static ULONG WINAPI DataObject_AddRef ( IDataObject iface)
static

Definition at line 1348 of file ole2.c.

1350{
1351 return 2;
1352}

◆ DataObject_DAdvise()

static HRESULT WINAPI DataObject_DAdvise ( IDataObject iface,
FORMATETC *  pformatetc,
DWORD  advf,
IAdviseSink pAdvSink,
DWORD pdwConnection 
)
static

Definition at line 1445 of file ole2.c.

1451{
1452 STGMEDIUM stgmedium;
1453
1454 CHECK_EXPECTED_METHOD("DataObject_DAdvise");
1455 *pdwConnection = 1;
1456
1457 if(advf & ADVF_PRIMEFIRST)
1458 {
1459 ok(pformatetc->cfFormat == cf_test_2, "got %04x\n", pformatetc->cfFormat);
1460 stgmedium.tymed = TYMED_HGLOBAL;
1461 stgmedium.hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, 4);
1462 stgmedium.pUnkForRelease = NULL;
1463 IAdviseSink_OnDataChange(pAdvSink, pformatetc, &stgmedium);
1464 }
1465
1466 return S_OK;
1467}
static UINT cf_test_2
Definition: ole2.c:119
#define GMEM_ZEROINIT
Definition: winbase.h:330

◆ DataObject_DUnadvise()

static HRESULT WINAPI DataObject_DUnadvise ( IDataObject iface,
DWORD  dwConnection 
)
static

Definition at line 1469 of file ole2.c.

1472{
1473 CHECK_EXPECTED_METHOD("DataObject_DUnadvise");
1474 return S_OK;
1475}

◆ DataObject_EnumDAdvise()

static HRESULT WINAPI DataObject_EnumDAdvise ( IDataObject iface,
IEnumSTATDATA **  ppenumAdvise 
)
static

Definition at line 1477 of file ole2.c.

1480{
1481 CHECK_EXPECTED_METHOD("DataObject_EnumDAdvise");
1483}
#define OLE_E_ADVISENOTSUPPORTED
Definition: winerror.h:3728

◆ DataObject_EnumFormatEtc()

static HRESULT WINAPI DataObject_EnumFormatEtc ( IDataObject iface,
DWORD  dwDirection,
IEnumFORMATETC **  ppenumFormatEtc 
)
static

Definition at line 1436 of file ole2.c.

1440{
1441 CHECK_EXPECTED_METHOD("DataObject_EnumFormatEtc");
1442 return E_NOTIMPL;
1443}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ DataObject_GetCanonicalFormatEtc()

static HRESULT WINAPI DataObject_GetCanonicalFormatEtc ( IDataObject iface,
LPFORMATETC  pformatectIn,
LPFORMATETC  pformatetcOut 
)
static

Definition at line 1417 of file ole2.c.

1421{
1422 CHECK_EXPECTED_METHOD("DataObject_GetCanonicalFormatEtc");
1423 return E_NOTIMPL;
1424}

◆ DataObject_GetData()

static HRESULT WINAPI DataObject_GetData ( IDataObject iface,
FORMATETC *  format,
STGMEDIUM *  medium 
)
static

Definition at line 1368 of file ole2.c.

1369{
1370 if (winetest_debug > 1) trace("IDataObject::GetData(cf %u)\n", format->cfFormat);
1371
1373 {
1374 switch (format->cfFormat)
1375 {
1376 case CF_DIB:
1377 medium->tymed = TYMED_HGLOBAL;
1378 medium->pUnkForRelease = NULL;
1379 medium->hGlobal = GlobalAlloc(GMEM_MOVEABLE, sizeof(dib_white));
1380 memcpy(GlobalLock(medium->hGlobal), data_object_dib, sizeof(dib_white));
1381 GlobalUnlock(medium->hGlobal);
1382 return S_OK;
1383 case CF_BITMAP:
1384 create_bitmap(medium);
1385 return S_OK;
1386 case CF_ENHMETAFILE:
1387 create_emf(medium);
1388 return S_OK;
1389 case CF_METAFILEPICT:
1390 create_mfpict(medium);
1391 return S_OK;
1392 case CF_TEXT:
1393 create_text(medium);
1394 return S_OK;
1395 }
1396 }
1397
1398 return S_FALSE;
1399}
#define CF_METAFILEPICT
Definition: constants.h:398
#define CF_BITMAP
Definition: constants.h:397
#define CF_ENHMETAFILE
Definition: constants.h:409
#define CF_TEXT
Definition: constants.h:396
#define CF_DIB
Definition: constants.h:403
static HGLOBAL create_text(void)
Definition: clipboard.c:1523
static HENHMETAFILE create_emf(void)
Definition: clipboard.c:1532
static void create_mfpict(STGMEDIUM *med)
Definition: ole2.c:239
static const BYTE * data_object_dib
Definition: ole2.c:122
static FORMATETC * data_object_format
Definition: ole2.c:121
static BOOL fmtetc_equal(const FORMATETC *a, const FORMATETC *b)
Definition: ole2.c:1360
static HBITMAP create_bitmap(void)
Definition: clipboard.c:530
Definition: format.c:58

◆ DataObject_GetDataHere()

static HRESULT WINAPI DataObject_GetDataHere ( IDataObject iface,
LPFORMATETC  pformatetc,
STGMEDIUM *  pmedium 
)
static

Definition at line 1401 of file ole2.c.

1405{
1406 CHECK_EXPECTED_METHOD("DataObject_GetDataHere");
1407 return E_NOTIMPL;
1408}

◆ DataObject_QueryGetData()

static HRESULT WINAPI DataObject_QueryGetData ( IDataObject iface,
FORMATETC *  format 
)
static

Definition at line 1410 of file ole2.c.

1411{
1412 if (winetest_debug > 1) trace("IDataObject::QueryGetData(cf %u)\n", format->cfFormat);
1413
1415}

◆ DataObject_QueryInterface()

static HRESULT WINAPI DataObject_QueryInterface ( IDataObject iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 1334 of file ole2.c.

1338{
1340 {
1341 *ppvObject = iface;
1342 return S_OK;
1343 }
1344 *ppvObject = NULL;
1345 return S_OK;
1346}
const GUID IID_IDataObject

◆ DataObject_Release()

static ULONG WINAPI DataObject_Release ( IDataObject iface)
static

Definition at line 1354 of file ole2.c.

1356{
1357 return 1;
1358}

◆ DataObject_SetData()

static HRESULT WINAPI DataObject_SetData ( IDataObject iface,
LPFORMATETC  pformatetc,
STGMEDIUM *  pmedium,
BOOL  fRelease 
)
static

Definition at line 1426 of file ole2.c.

1431{
1432 CHECK_EXPECTED_METHOD("DataObject_SetData");
1433 return E_NOTIMPL;
1434}

◆ DEFINE_EXPECT() [1/8]

DEFINE_EXPECT ( Storage_CreateStream_CompObj  )

◆ DEFINE_EXPECT() [2/8]

DEFINE_EXPECT ( Storage_CreateStream_OlePres  )

◆ DEFINE_EXPECT() [3/8]

DEFINE_EXPECT ( Storage_DestroyElement  )

◆ DEFINE_EXPECT() [4/8]

DEFINE_EXPECT ( Storage_OpenStream_CompObj  )

◆ DEFINE_EXPECT() [5/8]

DEFINE_EXPECT ( Storage_OpenStream_Ole  )

◆ DEFINE_EXPECT() [6/8]

DEFINE_EXPECT ( Storage_OpenStream_OlePres  )

◆ DEFINE_EXPECT() [7/8]

DEFINE_EXPECT ( Storage_SetClass  )

◆ DEFINE_EXPECT() [8/8]

DEFINE_EXPECT ( Storage_Stat  )

◆ draw_continue()

static BOOL STDMETHODCALLTYPE draw_continue ( ULONG_PTR  param)
static

Definition at line 1252 of file ole2.c.

1253{
1254 CHECK_EXPECTED_METHOD("draw_continue");
1255 return TRUE;
1256}

Referenced by test_data_cache().

◆ draw_continue_false()

static BOOL STDMETHODCALLTYPE draw_continue_false ( ULONG_PTR  param)
static

Definition at line 1258 of file ole2.c.

1259{
1260 CHECK_EXPECTED_METHOD("draw_continue_false");
1261 return FALSE;
1262}

Referenced by test_data_cache().

◆ fmtetc_equal()

static BOOL fmtetc_equal ( const FORMATETC *  a,
const FORMATETC *  b 
)
inlinestatic

Definition at line 1360 of file ole2.c.

1361{
1362 /* FIXME ptd */
1363 return a->cfFormat == b->cfFormat && a->dwAspect == b->dwAspect &&
1364 a->lindex == b->lindex && a->tymed == b->tymed;
1365
1366}
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204

Referenced by DataObject_GetData(), and DataObject_QueryGetData().

◆ get_stgdef()

static void get_stgdef ( struct storage_def stg_def,
CLIPFORMAT  cf,
STGMEDIUM *  stg_med,
int  stm_idx 
)
static

Definition at line 4118 of file ole2.c.

4119{
4120 BYTE *data;
4121 int data_size;
4122 METAFILEPICT *mfpict;
4123 HDC hdc;
4124
4125 switch (cf)
4126 {
4127 case CF_DIB:
4128 data_size = sizeof(dib_white);
4129 if (!strcmp(stg_def->stream[stm_idx].name, "CONTENTS"))
4130 {
4131 data_size += sizeof(dib_inf);
4132 data = malloc(data_size);
4133 memcpy(data, dib_inf, sizeof(dib_inf));
4134 memcpy(data + sizeof(dib_inf), dib_white, sizeof(dib_white));
4135 }
4136 else
4137 {
4138 data = malloc(data_size);
4139 memcpy(data, dib_white, sizeof(dib_white));
4140 }
4141 stg_def->stream[stm_idx].data = data;
4142 stg_def->stream[stm_idx].data_size = data_size;
4143 break;
4144 case CF_METAFILEPICT:
4145 mfpict = GlobalLock(stg_med->hMetaFilePict);
4146 data_size = GetMetaFileBitsEx(mfpict->hMF, 0, NULL);
4147 if (!strcmp(stg_def->stream[stm_idx].name, "CONTENTS"))
4148 {
4149 data = malloc(data_size + sizeof(mf_rec));
4150 memcpy(data, mf_rec, sizeof(mf_rec));
4151 GetMetaFileBitsEx(mfpict->hMF, data_size, data + sizeof(mf_rec));
4152 data_size += sizeof(mf_rec);
4153 }
4154 else
4155 {
4156 data = malloc(data_size);
4157 GetMetaFileBitsEx(mfpict->hMF, data_size, data);
4158 }
4159 GlobalUnlock(stg_med->hMetaFilePict);
4160 stg_def->stream[stm_idx].data_size = data_size;
4161 stg_def->stream[stm_idx].data = data;
4162 break;
4163 case CF_ENHMETAFILE:
4164 if (!strcmp(stg_def->stream[stm_idx].name, "CONTENTS"))
4165 {
4166 data_size = GetEnhMetaFileBits(stg_med->hEnhMetaFile, 0, NULL);
4167 data = malloc(sizeof(DWORD) + sizeof(ENHMETAHEADER) + data_size);
4168 *((DWORD *)data) = sizeof(ENHMETAHEADER);
4169 GetEnhMetaFileBits(stg_med->hEnhMetaFile, data_size, data + sizeof(DWORD) + sizeof(ENHMETAHEADER));
4170 memcpy(data + sizeof(DWORD), data + sizeof(DWORD) + sizeof(ENHMETAHEADER), sizeof(ENHMETAHEADER));
4171 data_size += sizeof(DWORD) + sizeof(ENHMETAHEADER);
4172 }
4173 else
4174 {
4175 hdc = GetDC(NULL);
4176 data_size = GetWinMetaFileBits(stg_med->hEnhMetaFile, 0, NULL, MM_ANISOTROPIC, hdc);
4177 data = malloc(data_size);
4178 GetWinMetaFileBits(stg_med->hEnhMetaFile, data_size, data, MM_ANISOTROPIC, hdc);
4179 ReleaseDC(NULL, hdc);
4180 }
4181 stg_def->stream[stm_idx].data_size = data_size;
4182 stg_def->stream[stm_idx].data = data;
4183 break;
4184 }
4185}
#define malloc
Definition: debug_ros.c:4
unsigned long DWORD
Definition: ntddk_ex.h:95
static const BYTE dib_inf[]
Definition: ole2.c:4105
static const BYTE mf_rec[]
Definition: ole2.c:4111
#define DWORD
Definition: nt_native.h:44
UINT WINAPI GetEnhMetaFileBits(_In_ HENHMETAFILE hEMF, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPBYTE lpData)
UINT WINAPI GetWinMetaFileBits(_In_ HENHMETAFILE hemf, _In_ UINT cbData16, _Out_writes_bytes_opt_(cbData16) LPBYTE pData16, _In_ INT iMapMode, _In_ HDC hdcRef)
UINT WINAPI GetMetaFileBitsEx(_In_ HMETAFILE hMF, _In_ UINT cbBuffer, _Out_writes_bytes_opt_(cbBuffer) LPVOID lpData)
struct tagENHMETAHEADER ENHMETAHEADER
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HDC WINAPI GetDC(_In_opt_ HWND)

Referenced by test_data_cache_save_data(), and test_OleCreateStaticFromData().

◆ get_stgmedium()

static void get_stgmedium ( CLIPFORMAT  cfFormat,
STGMEDIUM *  stgmedium 
)
static

Definition at line 4187 of file ole2.c.

4188{
4189 switch (cfFormat)
4190 {
4191 case CF_DIB:
4192 create_dib(stgmedium);
4193 break;
4194 case CF_METAFILEPICT:
4195 create_mfpict(stgmedium);
4196 break;
4197 case CF_ENHMETAFILE:
4198 create_emf(stgmedium);
4199 break;
4200 default:
4201 ok(0, "cf %x not implemented\n", cfFormat);
4202 }
4203}
static void create_dib(STGMEDIUM *med)
Definition: ole2.c:210

Referenced by test_data_cache_save_data(), and test_OleCreateStaticFromData().

◆ OleObject_AddRef()

static ULONG WINAPI OleObject_AddRef ( IOleObject iface)
static

Definition at line 299 of file ole2.c.

300{
302}
#define InterlockedIncrement
Definition: armddk.h:53
static LONG ole_object_refcount
Definition: ole2.c:272

◆ OleObject_Advise()

static HRESULT WINAPI OleObject_Advise ( IOleObject iface,
IAdviseSink pAdvSink,
DWORD pdwConnection 
)
static

Definition at line 482 of file ole2.c.

488{
489 CHECK_EXPECTED_METHOD("OleObject_Advise");
490 return S_OK;
491}

◆ OleObject_Close()

static HRESULT WINAPI OleObject_Close ( IOleObject iface,
DWORD  dwSaveOption 
)
static

Definition at line 340 of file ole2.c.

345{
346 CHECK_EXPECTED_METHOD("OleObject_Close");
347 return S_OK;
348}

◆ OleObject_DoVerb()

static HRESULT WINAPI OleObject_DoVerb ( IOleObject iface,
LONG  iVerb,
LPMSG  lpmsg,
IOleClientSite pActiveSite,
LONG  lindex,
HWND  hwndParent,
LPCRECT  lprcPosRect 
)
static

Definition at line 396 of file ole2.c.

406{
407 CHECK_EXPECTED_METHOD("OleObject_DoVerb");
408 return S_OK;
409}

◆ OleObject_EnumAdvise()

static HRESULT WINAPI OleObject_EnumAdvise ( IOleObject iface,
IEnumSTATDATA **  ppenumAdvise 
)
static

Definition at line 503 of file ole2.c.

508{
509 CHECK_EXPECTED_METHOD("OleObject_EnumAdvise");
510 return E_NOTIMPL;
511}

◆ OleObject_EnumVerbs()

static HRESULT WINAPI OleObject_EnumVerbs ( IOleObject iface,
IEnumOLEVERB **  ppEnumOleVerb 
)
static

Definition at line 411 of file ole2.c.

416{
417 CHECK_EXPECTED_METHOD("OleObject_EnumVerbs");
418 return E_NOTIMPL;
419}

◆ OleObject_GetClientSite()

static HRESULT WINAPI OleObject_GetClientSite ( IOleObject iface,
IOleClientSite **  ppClientSite 
)
static

Definition at line 319 of file ole2.c.

324{
325 CHECK_EXPECTED_METHOD("OleObject_GetClientSite");
326 return E_NOTIMPL;
327}

◆ OleObject_GetClipboardData()

static HRESULT WINAPI OleObject_GetClipboardData ( IOleObject iface,
DWORD  dwReserved,
IDataObject **  ppDataObject 
)
static

Definition at line 385 of file ole2.c.

391{
392 CHECK_EXPECTED_METHOD("OleObject_GetClipboardData");
393 return E_NOTIMPL;
394}

◆ OleObject_GetExtent()

static HRESULT WINAPI OleObject_GetExtent ( IOleObject iface,
DWORD  dwDrawAspect,
SIZEL psizel 
)
static

Definition at line 471 of file ole2.c.

477{
478 CHECK_EXPECTED_METHOD("OleObject_GetExtent");
479 return E_NOTIMPL;
480}

◆ OleObject_GetMiscStatus()

static HRESULT WINAPI OleObject_GetMiscStatus ( IOleObject iface,
DWORD  aspect,
DWORD pdwStatus 
)
static

Definition at line 513 of file ole2.c.

519{
520 CHECK_EXPECTED_METHOD("OleObject_GetMiscStatus");
521
522 ok(aspect == DVASPECT_CONTENT, "got aspect %ld\n", aspect);
523
525 {
526 *pdwStatus = OLEMISC_RECOMPOSEONRESIZE;
527 return S_OK;
528 }
529 else
530 {
531 *pdwStatus = 0x1234;
533 }
534}
static HRESULT g_GetMiscStatusFailsWith
Definition: ole2.c:116
@ OLEMISC_RECOMPOSEONRESIZE
Definition: actctx.c:82

◆ OleObject_GetMoniker()

static HRESULT WINAPI OleObject_GetMoniker ( IOleObject iface,
DWORD  dwAssign,
DWORD  dwWhichMoniker,
IMoniker **  ppmk 
)
static

Definition at line 361 of file ole2.c.

368{
369 CHECK_EXPECTED_METHOD("OleObject_GetMoniker");
370 return S_OK;
371}

◆ OleObject_GetUserClassID()

static HRESULT WINAPI OleObject_GetUserClassID ( IOleObject iface,
CLSID pClsid 
)
static

Definition at line 439 of file ole2.c.

444{
445 CHECK_EXPECTED_METHOD("OleObject_GetUserClassID");
446 return E_NOTIMPL;
447}

◆ OleObject_GetUserType()

static HRESULT WINAPI OleObject_GetUserType ( IOleObject iface,
DWORD  dwFormOfType,
LPOLESTR pszUserType 
)
static

Definition at line 449 of file ole2.c.

455{
456 CHECK_EXPECTED_METHOD("OleObject_GetUserType");
457 return E_NOTIMPL;
458}

◆ OleObject_InitFromData()

static HRESULT WINAPI OleObject_InitFromData ( IOleObject iface,
IDataObject pDataObject,
BOOL  fCreation,
DWORD  dwReserved 
)
static

Definition at line 373 of file ole2.c.

380{
381 CHECK_EXPECTED_METHOD("OleObject_InitFromData");
382 return S_OK;
383}

◆ OleObject_IsUpToDate()

static HRESULT WINAPI OleObject_IsUpToDate ( IOleObject iface)
static

Definition at line 430 of file ole2.c.

434{
435 CHECK_EXPECTED_METHOD("OleObject_IsUpToDate");
436 return S_OK;
437}

◆ OleObject_QueryInterface()

static HRESULT WINAPI OleObject_QueryInterface ( IOleObject iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 274 of file ole2.c.

275{
276 if (winetest_debug > 1) trace("IOleObject::QueryInterface(%s)\n", debugstr_guid(riid));
277
278 *ppv = NULL;
279
281 *ppv = iface;
284 else if (IsEqualIID(riid, &IID_IOleCache))
285 *ppv = cache;
287 *ppv = runnable;
288 else if (IsEqualIID(riid, &IID_WineTest))
289 return g_QIFailsWith;
290
291 if(*ppv) {
292 IUnknown_AddRef((IUnknown*)*ppv);
293 return S_OK;
294 }
295
296 return E_NOINTERFACE;
297}
#define debugstr_guid
Definition: kernel32.h:35
static IPersistStorage OleObjectPersistStg
Definition: ole2.c:74
static HRESULT g_QIFailsWith
Definition: ole2.c:117
static IOleCache * cache
Definition: ole2.c:75
static BOOL g_showRunnable
Definition: ole2.c:114
static const IID IID_WineTest
Definition: ole2.c:94
static IRunnableObject * runnable
Definition: ole2.c:76
const GUID IID_IOleCache
const GUID IID_IRunnableObject
const GUID IID_IPersistStorage
const GUID IID_IOleObject

◆ OleObject_Release()

static ULONG WINAPI OleObject_Release ( IOleObject iface)
static

Definition at line 304 of file ole2.c.

305{
307}
#define InterlockedDecrement
Definition: armddk.h:52

◆ OleObject_SetClientSite()

static HRESULT WINAPI OleObject_SetClientSite ( IOleObject iface,
IOleClientSite pClientSite 
)
static

Definition at line 309 of file ole2.c.

314{
315 CHECK_EXPECTED_METHOD("OleObject_SetClientSite");
316 return S_OK;
317}

◆ OleObject_SetColorScheme()

static HRESULT WINAPI OleObject_SetColorScheme ( IOleObject iface,
LOGPALETTE pLogpal 
)
static

Definition at line 536 of file ole2.c.

541{
542 CHECK_EXPECTED_METHOD("OleObject_SetColorScheme");
543 return E_NOTIMPL;
544}

◆ OleObject_SetExtent()

static HRESULT WINAPI OleObject_SetExtent ( IOleObject iface,
DWORD  dwDrawAspect,
SIZEL psizel 
)
static

Definition at line 460 of file ole2.c.

466{
467 CHECK_EXPECTED_METHOD("OleObject_SetExtent");
468 return S_OK;
469}

◆ OleObject_SetHostNames()

static HRESULT WINAPI OleObject_SetHostNames ( IOleObject iface,
LPCOLESTR  szContainerApp,
LPCOLESTR  szContainerObj 
)
static

Definition at line 329 of file ole2.c.

335{
336 CHECK_EXPECTED_METHOD("OleObject_SetHostNames");
337 return S_OK;
338}

◆ OleObject_SetMoniker()

static HRESULT WINAPI OleObject_SetMoniker ( IOleObject iface,
DWORD  dwWhichMoniker,
IMoniker pmk 
)
static

Definition at line 350 of file ole2.c.

356{
357 CHECK_EXPECTED_METHOD("OleObject_SetMoniker");
358 return S_OK;
359}

◆ OleObject_Unadvise()

static HRESULT WINAPI OleObject_Unadvise ( IOleObject iface,
DWORD  dwConnection 
)
static

Definition at line 493 of file ole2.c.

498{
499 CHECK_EXPECTED_METHOD("OleObject_Unadvise");
500 return S_OK;
501}

◆ OleObject_Update()

static HRESULT WINAPI OleObject_Update ( IOleObject iface)
static

Definition at line 421 of file ole2.c.

425{
426 CHECK_EXPECTED_METHOD("OleObject_Update");
427 return S_OK;
428}

◆ OleObjectCache_AddRef()

static ULONG WINAPI OleObjectCache_AddRef ( IOleCache iface)
static

Definition at line 677 of file ole2.c.

678{
679 return IOleObject_AddRef(&OleObject);
680}
static IOleObject OleObject
Definition: ole2.c:574

◆ OleObjectCache_Cache()

static HRESULT WINAPI OleObjectCache_Cache ( IOleCache iface,
FORMATETC *  pformatetc,
DWORD  advf,
DWORD pdwConnection 
)
static

Definition at line 687 of file ole2.c.

694{
695 CHECK_EXPECTED_METHOD("OleObjectCache_Cache");
696 if (g_expected_fetc) {
697 ok(pformatetc != NULL, "pformatetc should not be NULL\n");
698 if (pformatetc) {
699 ok(pformatetc->cfFormat == g_expected_fetc->cfFormat,
700 "cfFormat: %x\n", pformatetc->cfFormat);
701 ok((pformatetc->ptd != NULL) == (g_expected_fetc->ptd != NULL),
702 "ptd: %p\n", pformatetc->ptd);
703 ok(pformatetc->dwAspect == g_expected_fetc->dwAspect,
704 "dwAspect: %lx\n", pformatetc->dwAspect);
705 ok(pformatetc->lindex == g_expected_fetc->lindex,
706 "lindex: %lx\n", pformatetc->lindex);
707 ok(pformatetc->tymed == g_expected_fetc->tymed,
708 "tymed: %lx\n", pformatetc->tymed);
709 }
710 } else
711 ok(pformatetc == NULL, "pformatetc should be NULL\n");
712 return S_OK;
713}
static FORMATETC * g_expected_fetc
Definition: ole2.c:112

◆ OleObjectCache_EnumCache()

static HRESULT WINAPI OleObjectCache_EnumCache ( IOleCache iface,
IEnumSTATDATA **  ppenumSTATDATA 
)
static

Definition at line 725 of file ole2.c.

730{
731 CHECK_EXPECTED_METHOD("OleObjectCache_EnumCache");
732 return S_OK;
733}

◆ OleObjectCache_InitCache()

static HRESULT WINAPI OleObjectCache_InitCache ( IOleCache iface,
IDataObject pDataObject 
)
static

Definition at line 736 of file ole2.c.

741{
742 CHECK_EXPECTED_METHOD("OleObjectCache_InitCache");
743 return S_OK;
744}

◆ OleObjectCache_QueryInterface()

static HRESULT WINAPI OleObjectCache_QueryInterface ( IOleCache iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 672 of file ole2.c.

673{
674 return IOleObject_QueryInterface(&OleObject, riid, ppv);
675}

◆ OleObjectCache_Release()

static ULONG WINAPI OleObjectCache_Release ( IOleCache iface)
static

Definition at line 682 of file ole2.c.

683{
684 return IOleObject_Release(&OleObject);
685}

◆ OleObjectCache_SetData()

static HRESULT WINAPI OleObjectCache_SetData ( IOleCache iface,
FORMATETC *  pformatetc,
STGMEDIUM *  pmedium,
BOOL  fRelease 
)
static

Definition at line 747 of file ole2.c.

754{
755 CHECK_EXPECTED_METHOD("OleObjectCache_SetData");
756 return S_OK;
757}

◆ OleObjectCache_Uncache()

static HRESULT WINAPI OleObjectCache_Uncache ( IOleCache iface,
DWORD  dwConnection 
)
static

Definition at line 715 of file ole2.c.

720{
721 CHECK_EXPECTED_METHOD("OleObjectCache_Uncache");
722 return S_OK;
723}

◆ OleObjectCF_AddRef()

static ULONG WINAPI OleObjectCF_AddRef ( IClassFactory iface)
static

Definition at line 786 of file ole2.c.

787{
788 return 2;
789}

◆ OleObjectCF_CreateInstance()

static HRESULT WINAPI OleObjectCF_CreateInstance ( IClassFactory iface,
IUnknown punkOuter,
REFIID  riid,
void **  ppv 
)
static

Definition at line 796 of file ole2.c.

797{
798 return IOleObject_QueryInterface(&OleObject, riid, ppv);
799}

◆ OleObjectCF_LockServer()

static HRESULT WINAPI OleObjectCF_LockServer ( IClassFactory iface,
BOOL  lock 
)
static

Definition at line 801 of file ole2.c.

802{
803 return S_OK;
804}

◆ OleObjectCF_QueryInterface()

static HRESULT WINAPI OleObjectCF_QueryInterface ( IClassFactory iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 774 of file ole2.c.

775{
777 {
778 *ppv = iface;
779 IClassFactory_AddRef(iface);
780 return S_OK;
781 }
782 *ppv = NULL;
783 return E_NOINTERFACE;
784}
const GUID IID_IClassFactory

◆ OleObjectCF_Release()

static ULONG WINAPI OleObjectCF_Release ( IClassFactory iface)
static

Definition at line 791 of file ole2.c.

792{
793 return 1;
794}

◆ OleObjectPersistStg_AddRef()

static ULONG WINAPI OleObjectPersistStg_AddRef ( IPersistStorage iface)
static

Definition at line 581 of file ole2.c.

582{
583 return IOleObject_AddRef(&OleObject);
584}

◆ OleObjectPersistStg_GetClassId()

static HRESULT WINAPI OleObjectPersistStg_GetClassId ( IPersistStorage iface,
CLSID clsid 
)
static

Definition at line 591 of file ole2.c.

592{
593 CHECK_EXPECTED_METHOD("OleObjectPersistStg_GetClassId");
594 return E_NOTIMPL;
595}

◆ OleObjectPersistStg_HandsOffStorage()

static HRESULT WINAPI OleObjectPersistStg_HandsOffStorage ( IPersistStorage iface)
static

Definition at line 647 of file ole2.c.

651{
652 CHECK_EXPECTED_METHOD("OleObjectPersistStg_HandsOffStorage");
653 return S_OK;
654}

◆ OleObjectPersistStg_InitNew()

static HRESULT WINAPI OleObjectPersistStg_InitNew ( IPersistStorage iface,
IStorage pStg 
)
static

Definition at line 606 of file ole2.c.

611{
612 CHECK_EXPECTED_METHOD("OleObjectPersistStg_InitNew");
613 return S_OK;
614}

◆ OleObjectPersistStg_IsDirty()

static HRESULT WINAPI OleObjectPersistStg_IsDirty ( IPersistStorage iface)
static

Definition at line 597 of file ole2.c.

601{
602 CHECK_EXPECTED_METHOD("OleObjectPersistStg_IsDirty");
603 return S_OK;
604}

◆ OleObjectPersistStg_Load()

static HRESULT WINAPI OleObjectPersistStg_Load ( IPersistStorage iface,
IStorage pStg 
)
static

Definition at line 616 of file ole2.c.

621{
622 CHECK_EXPECTED_METHOD("OleObjectPersistStg_Load");
623 return S_OK;
624}

◆ OleObjectPersistStg_QueryInterface()

static HRESULT WINAPI OleObjectPersistStg_QueryInterface ( IPersistStorage iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 576 of file ole2.c.

577{
578 return IOleObject_QueryInterface(&OleObject, riid, ppv);
579}

◆ OleObjectPersistStg_Release()

static ULONG WINAPI OleObjectPersistStg_Release ( IPersistStorage iface)
static

Definition at line 586 of file ole2.c.

587{
588 return IOleObject_Release(&OleObject);
589}

◆ OleObjectPersistStg_Save()

static HRESULT WINAPI OleObjectPersistStg_Save ( IPersistStorage iface,
IStorage pStgSave,
BOOL  fSameAsLoad 
)
static

Definition at line 626 of file ole2.c.

632{
633 CHECK_EXPECTED_METHOD("OleObjectPersistStg_Save");
634 return S_OK;
635}

◆ OleObjectPersistStg_SaveCompleted()

static HRESULT WINAPI OleObjectPersistStg_SaveCompleted ( IPersistStorage iface,
IStorage pStgNew 
)
static

Definition at line 637 of file ole2.c.

642{
643 CHECK_EXPECTED_METHOD("OleObjectPersistStg_SaveCompleted");
644 return S_OK;
645}

◆ OleObjectRunnable_AddRef()

static ULONG WINAPI OleObjectRunnable_AddRef ( IRunnableObject iface)
static

Definition at line 822 of file ole2.c.

823{
824 return IOleObject_AddRef(&OleObject);
825}

◆ OleObjectRunnable_GetRunningClass()

static HRESULT WINAPI OleObjectRunnable_GetRunningClass ( IRunnableObject iface,
LPCLSID  lpClsid 
)
static

Definition at line 832 of file ole2.c.

835{
836 CHECK_EXPECTED_METHOD("OleObjectRunnable_GetRunningClass");
837 return E_NOTIMPL;
838}

◆ OleObjectRunnable_IsRunning()

static BOOL WINAPI OleObjectRunnable_IsRunning ( IRunnableObject iface)
static

Definition at line 848 of file ole2.c.

849{
850 CHECK_EXPECTED_METHOD("OleObjectRunnable_IsRunning");
851 return g_isRunning;
852}
static BOOL g_isRunning
Definition: ole2.c:115

◆ OleObjectRunnable_LockRunning()

static HRESULT WINAPI OleObjectRunnable_LockRunning ( IRunnableObject iface,
BOOL  fLock,
BOOL  fLastUnlockCloses 
)
static

Definition at line 854 of file ole2.c.

858{
859 CHECK_EXPECTED_METHOD("OleObjectRunnable_LockRunning");
860 return S_OK;
861}

◆ OleObjectRunnable_QueryInterface()

static HRESULT WINAPI OleObjectRunnable_QueryInterface ( IRunnableObject iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 817 of file ole2.c.

818{
819 return IOleObject_QueryInterface(&OleObject, riid, ppv);
820}

◆ OleObjectRunnable_Release()

static ULONG WINAPI OleObjectRunnable_Release ( IRunnableObject iface)
static

Definition at line 827 of file ole2.c.

828{
829 return IOleObject_Release(&OleObject);
830}

◆ OleObjectRunnable_Run()

static HRESULT WINAPI OleObjectRunnable_Run ( IRunnableObject iface,
LPBINDCTX  pbc 
)
static

Definition at line 840 of file ole2.c.

843{
844 CHECK_EXPECTED_METHOD("OleObjectRunnable_Run");
845 return S_OK;
846}

◆ OleObjectRunnable_SetContainedObject()

static HRESULT WINAPI OleObjectRunnable_SetContainedObject ( IRunnableObject iface,
BOOL  fContained 
)
static

Definition at line 863 of file ole2.c.

866{
867 CHECK_EXPECTED_METHOD("OleObjectRunnable_SetContainedObject");
868 return S_OK;
869}

◆ OleRun_AddRef()

static ULONG WINAPI OleRun_AddRef ( IRunnableObject iface)
static

Definition at line 3079 of file ole2.c.

3080{
3081 return 2;
3082}

◆ OleRun_GetRunningClass()

static HRESULT WINAPI OleRun_GetRunningClass ( IRunnableObject iface,
CLSID clsid 
)
static

Definition at line 3089 of file ole2.c.

3090{
3091 ok(0, "unexpected\n");
3092 return E_NOTIMPL;
3093}

◆ OleRun_IsRunning()

static BOOL WINAPI OleRun_IsRunning ( IRunnableObject iface)
static

Definition at line 3101 of file ole2.c.

3102{
3103 ok(0, "unexpected\n");
3104 return FALSE;
3105}

◆ OleRun_LockRunning()

static HRESULT WINAPI OleRun_LockRunning ( IRunnableObject iface,
BOOL  lock,
BOOL  last_unlock_closes 
)
static

Definition at line 3107 of file ole2.c.

3109{
3110 ok(0, "unexpected\n");
3111 return E_NOTIMPL;
3112}

◆ OleRun_QueryInterface()

static HRESULT WINAPI OleRun_QueryInterface ( IRunnableObject iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 3061 of file ole2.c.

3062{
3063 *ppv = NULL;
3064
3065 if (IsEqualIID(riid, &IID_IUnknown) ||
3067 *ppv = iface;
3068 }
3069
3070 if (*ppv)
3071 {
3072 IUnknown_AddRef((IUnknown *)*ppv);
3073 return S_OK;
3074 }
3075
3076 return E_NOINTERFACE;
3077}

◆ OleRun_Release()

static ULONG WINAPI OleRun_Release ( IRunnableObject iface)
static

Definition at line 3084 of file ole2.c.

3085{
3086 return 1;
3087}

◆ OleRun_Run()

static HRESULT WINAPI OleRun_Run ( IRunnableObject iface,
LPBINDCTX  ctx 
)
static

Definition at line 3095 of file ole2.c.

3096{
3097 ok(ctx == NULL, "got %p\n", ctx);
3098 return 0xdeadc0de;
3099}

◆ OleRun_SetContainedObject()

static HRESULT WINAPI OleRun_SetContainedObject ( IRunnableObject iface,
BOOL  contained 
)
static

Definition at line 3114 of file ole2.c.

3115{
3116 ok(0, "unexpected\n");
3117 return E_NOTIMPL;
3118}

◆ read_clipformat()

static int read_clipformat ( IStream stream)
static

Definition at line 3834 of file ole2.c.

3835{
3836 HRESULT hr;
3837 ULONG bytes;
3838 int length, clipformat = -2;
3839
3840 hr = IStream_Read(stream, &length, sizeof(length), &bytes);
3841 if (hr != S_OK || bytes != sizeof(length))
3842 return -2;
3843 if (length == 0)
3844 return 0;
3845 if (length == -1)
3846 {
3847 hr = IStream_Read(stream, &clipformat, sizeof(clipformat), &bytes);
3848 if (hr != S_OK || bytes != sizeof(clipformat))
3849 return -2;
3850 }
3851 else
3852 ok(0, "unhandled clipformat length %d\n", length);
3853
3854 return clipformat;
3855}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040

Referenced by check_storage_contents().

◆ START_TEST()

START_TEST ( ole2  )

Definition at line 4624 of file ole2.c.

4625{
4626 DWORD dwRegister;
4627 IStorage *pStorage;
4628 STATSTG statstg;
4629 HRESULT hr;
4630
4631 cf_test_1 = RegisterClipboardFormatA("cf_winetest_1");
4632 cf_test_2 = RegisterClipboardFormatA("cf_winetest_2");
4633 cf_test_3 = RegisterClipboardFormatA("cf_winetest_3");
4634
4636
4637 hr = CoRegisterClassObject(&CLSID_Equation3, (IUnknown *)&OleObjectCF, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &dwRegister);
4638 ok_ole_success(hr, "CoRegisterClassObject");
4639
4641 ok_ole_success(hr, "StgCreateDocfile");
4642
4643 test_OleCreate(pStorage);
4644
4645 hr = IStorage_Stat(pStorage, &statstg, STATFLAG_NONAME);
4646 ok_ole_success(hr, "IStorage_Stat");
4647 ok(IsEqualCLSID(&CLSID_Equation3, &statstg.clsid), "Wrong CLSID in storage\n");
4648
4649 test_OleLoad(pStorage);
4650
4651 IStorage_Release(pStorage);
4652
4653 hr = CoRevokeClassObject(dwRegister);
4654 ok_ole_success(hr, "CoRevokeClassObject");
4655
4657
4666 test_runnable();
4667 test_OleRun();
4669 test_OleDraw();
4676
4678}
HRESULT WINAPI DECLSPEC_HOTPATCH CoRevokeClassObject(DWORD cookie)
Definition: combase.c:3107
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid, IUnknown *object, DWORD clscontext, DWORD flags, DWORD *cookie)
Definition: combase.c:2970
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
static void test_data_cache_updatecache(void)
Definition: ole2.c:2523
static UINT cf_test_1
Definition: ole2.c:119
static void test_data_cache_save(void)
Definition: ole2.c:3604
#define ok_ole_success(hr, func)
Definition: ole2.c:36
static const CLSID CLSID_WineTest
Definition: ole2.c:86
static void test_runnable(void)
Definition: ole2.c:3016
static void test_data_cache_cache(void)
Definition: ole2.c:2103
static void test_default_handler(void)
Definition: ole2.c:2818
static void test_OleLockRunning(void)
Definition: ole2.c:3146
static void test_data_cache_save_data(void)
Definition: ole2.c:4206
static const CLSID CLSID_Equation3
Definition: ole2.c:885
static IClassFactory OleObjectCF
Definition: ole2.c:815
static UINT cf_test_3
Definition: ole2.c:119
static void test_OleCreateStaticFromData(void)
Definition: ole2.c:4478
static void test_data_cache_initnew(void)
Definition: ole2.c:2401
static void test_OleLoad(IStorage *pStorage)
Definition: ole2.c:1101
static void test_OleDraw(void)
Definition: ole2.c:3154
static void test_data_cache(void)
Definition: ole2.c:1567
static void test_OleDoAutoConvert(void)
Definition: ole2.c:3414
static void test_data_cache_dib_contents_stream(int num)
Definition: ole2.c:1994
static void test_data_cache_contents(void)
Definition: ole2.c:4401
static void test_ReleaseStgMedium(void)
Definition: ole2.c:4619
static void test_data_cache_init(void)
Definition: ole2.c:2356
static void test_OleCreate(IStorage *pStorage)
Definition: ole2.c:965
static void test_OleRun(void)
Definition: ole2.c:3134
static const CLSID * Storage_SetClass_CLSID
Definition: ole2.c:71
@ REGCLS_MULTIPLEUSE
Definition: objbase.h:396
UINT WINAPI RegisterClipboardFormatA(_In_ LPCSTR)

◆ stgmedium_cmp()

static HRESULT stgmedium_cmp ( const STGMEDIUM *  med1,
STGMEDIUM *  med2 
)
static

Definition at line 3965 of file ole2.c.

3966{
3967 BYTE *data1, *data2;
3968 ULONG datasize1, datasize2;
3969
3970 if (med1->tymed != med2->tymed)
3971 return E_FAIL;
3972
3973 if (med1->tymed == TYMED_MFPICT)
3974 {
3975 METAFILEPICT *mfpict1 = GlobalLock(med1->hMetaFilePict);
3976 METAFILEPICT *mfpict2 = GlobalLock(med2->hMetaFilePict);
3977
3978 datasize1 = GetMetaFileBitsEx(mfpict1->hMF, 0, NULL);
3979 datasize2 = GetMetaFileBitsEx(mfpict2->hMF, 0, NULL);
3980 if (datasize1 == datasize2)
3981 {
3982 data1 = malloc(datasize1);
3983 data2 = malloc(datasize2);
3984 GetMetaFileBitsEx(mfpict1->hMF, datasize1, data1);
3985 GetMetaFileBitsEx(mfpict2->hMF, datasize2, data2);
3986 }
3987 else return E_FAIL;
3988 }
3989 else if (med1->tymed == TYMED_ENHMF)
3990 {
3991 datasize1 = GetEnhMetaFileBits(med1->hEnhMetaFile, 0, NULL);
3992 datasize2 = GetEnhMetaFileBits(med2->hEnhMetaFile, 0, NULL);
3993 if (datasize1 == datasize2)
3994 {
3995 data1 = malloc(datasize1);
3996 data2 = malloc(datasize2);
3997 GetEnhMetaFileBits(med1->hEnhMetaFile, datasize1, data1);
3998 GetEnhMetaFileBits(med2->hEnhMetaFile, datasize2, data2);
3999 }
4000 else return E_FAIL;
4001 }
4002 else if (med1->tymed == TYMED_HGLOBAL)
4003 {
4004 datasize1 = GlobalSize(med1->hGlobal);
4005 datasize2 = GlobalSize(med2->hGlobal);
4006
4007 if (datasize1 == datasize2)
4008 {
4009 data1 = GlobalLock(med1->hGlobal);
4010 data2 = GlobalLock(med2->hGlobal);
4011 }
4012 else
4013 return E_FAIL;
4014 }
4015 else
4016 return E_NOTIMPL;
4017
4018 if (memcmp(data1, data2, datasize1) != 0)
4019 return E_FAIL;
4020
4021 if (med1->tymed == TYMED_HGLOBAL)
4022 {
4023 GlobalUnlock(med1->hGlobal);
4024 GlobalUnlock(med2->hGlobal);
4025 }
4026 else if (med1->tymed == TYMED_MFPICT)
4027 {
4028 free(data1);
4029 free(data2);
4030 GlobalUnlock(med1->hMetaFilePict);
4031 GlobalUnlock(med2->hMetaFilePict);
4032 }
4033 else
4034 {
4035 free(data1);
4036 free(data2);
4037 }
4038
4039 return S_OK;
4040}
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
Definition: tftpd.h:126
Definition: tftpd.h:138

Referenced by test_data_cache_save_data().

◆ Storage_AddRef()

static ULONG WINAPI Storage_AddRef ( IStorage iface)
static

Definition at line 3182 of file ole2.c.

3183{
3184 ok(0, "unexpected call to AddRef\n");
3185 return 2;
3186}

◆ Storage_Commit()

static HRESULT WINAPI Storage_Commit ( IStorage iface,
DWORD  grfCommitFlags 
)
static

Definition at line 3316 of file ole2.c.

3317{
3318 ok(0, "unexpected call to Commit\n");
3319 return E_NOTIMPL;
3320}

◆ Storage_CopyTo()

static HRESULT WINAPI Storage_CopyTo ( IStorage iface,
DWORD  ciidExclude,
const IID rgiidExclude,
SNB  snbExclude,
IStorage pstgDest 
)
static

Definition at line 3304 of file ole2.c.

3305{
3306 ok(0, "unexpected call to CopyTo\n");
3307 return E_NOTIMPL;
3308}

◆ Storage_CreateStorage()

static HRESULT WINAPI Storage_CreateStorage ( IStorage iface,
LPCOLESTR  pwcsName,
DWORD  grfMode,
DWORD  dwStgFmt,
DWORD  reserved2,
IStorage **  ppstg 
)
static

Definition at line 3292 of file ole2.c.

3293{
3294 ok(0, "unexpected call to CreateStorage\n");
3295 return E_NOTIMPL;
3296}

◆ Storage_CreateStream()

static HRESULT WINAPI Storage_CreateStream ( IStorage iface,
LPCOLESTR  pwcsName,
DWORD  grfMode,
DWORD  reserved1,
DWORD  reserved2,
IStream **  ppstm 
)
static

Definition at line 3194 of file ole2.c.

3195{
3196 ULARGE_INTEGER size = {{0}};
3197 LARGE_INTEGER pos = {{0}};
3198 HRESULT hr;
3199
3200 if (!lstrcmpW(pwcsName, comp_objW))
3201 {
3202 CHECK_EXPECT(Storage_CreateStream_CompObj);
3203 *ppstm = comp_obj_stream;
3204
3205 todo_wine ok(grfMode == (STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE), "grfMode = %lx\n", grfMode);
3206 }
3207 else if (!lstrcmpW(pwcsName, olepres0W))
3208 {
3209 CHECK_EXPECT(Storage_CreateStream_OlePres);
3210 *ppstm = olepres_stream;
3211
3212 todo_wine ok(grfMode == (STGM_SHARE_EXCLUSIVE|STGM_READWRITE), "grfMode = %lx\n", grfMode);
3213 }
3214 else
3215 {
3216 todo_wine
3217 ok(0, "unexpected stream name %s\n", wine_dbgstr_w(pwcsName));
3218#if 0 /* FIXME: return NULL once Wine is fixed */
3219 *ppstm = NULL;
3220 return E_NOTIMPL;
3221#else
3222 *ppstm = contents_stream;
3223#endif
3224 }
3225
3226 ok(!reserved1, "reserved1 = %lx\n", reserved1);
3227 ok(!reserved2, "reserved2 = %lx\n", reserved2);
3228 ok(!!ppstm, "ppstm = NULL\n");
3229
3230 IStream_AddRef(*ppstm);
3231 hr = IStream_Seek(*ppstm, pos, STREAM_SEEK_SET, NULL);
3232 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3233 hr = IStream_SetSize(*ppstm, size);
3234 ok(hr == S_OK, "IStream_SetSize returned %lx\n", hr);
3235 return S_OK;
3236}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
uint8_t reserved2[12]
Definition: fsck.fat.h:23
#define todo_wine
Definition: minitest.h:80
#define CHECK_EXPECT(func)
Definition: ole2.c:50
static const WCHAR comp_objW[]
Definition: ole2.c:3170
static const WCHAR olepres0W[]
Definition: ole2.c:3169
static IStream * olepres_stream
Definition: ole2.c:3173
static IStream * comp_obj_stream
Definition: ole2.c:3171
static IStream * contents_stream
Definition: ole2.c:3174

◆ Storage_DestroyElement()

static HRESULT WINAPI Storage_DestroyElement ( IStorage iface,
LPCOLESTR  pwcsName 
)
static

Definition at line 3334 of file ole2.c.

3335{
3336 char name[32];
3337 int stream_n, cmp;
3338
3340 cmp = CompareStringW(LOCALE_NEUTRAL, 0, pwcsName, 8, olepres0W, 8);
3341 ok(cmp == CSTR_EQUAL,
3342 "unexpected call to DestroyElement(%s)\n", wine_dbgstr_w(pwcsName));
3343
3344 WideCharToMultiByte(CP_ACP, 0, pwcsName, -1, name, sizeof(name), NULL, NULL);
3345 stream_n = atol(name + 8);
3346 if (stream_n <= Storage_DestroyElement_limit)
3347 return S_OK;
3348
3349 return STG_E_FILENOTFOUND;
3350}
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
Definition: locale.c:3946
_ACRTIMP __msvcrt_long __cdecl atol(const char *)
Definition: string.c:1782
#define cmp(status, error)
Definition: error.c:114
static HRESULT WINAPI Storage_DestroyElement(IStorage *iface, LPCOLESTR pwcsName)
Definition: ole2.c:3334
static int Storage_DestroyElement_limit
Definition: ole2.c:72
#define CHECK_EXPECT2(func)
Definition: ole2.c:44
#define LOCALE_NEUTRAL
#define STG_E_FILENOTFOUND
Definition: winerror.h:3660
#define CSTR_EQUAL
Definition: winnls.h:500

Referenced by Storage_DestroyElement(), and test_data_cache_save().

◆ Storage_EnumElements()

static HRESULT WINAPI Storage_EnumElements ( IStorage iface,
DWORD  reserved1,
void reserved2,
DWORD  reserved3,
IEnumSTATSTG **  ppenum 
)
static

Definition at line 3328 of file ole2.c.

3329{
3330 ok(0, "unexpected call to EnumElements\n");
3331 return E_NOTIMPL;
3332}

◆ Storage_MoveElementTo()

static HRESULT WINAPI Storage_MoveElementTo ( IStorage iface,
LPCOLESTR  pwcsName,
IStorage pstgDest,
LPCOLESTR  pwcsNewName,
DWORD  grfFlags 
)
static

Definition at line 3310 of file ole2.c.

3311{
3312 ok(0, "unexpected call to MoveElementTo\n");
3313 return E_NOTIMPL;
3314}

◆ Storage_OpenStorage()

static HRESULT WINAPI Storage_OpenStorage ( IStorage iface,
LPCOLESTR  pwcsName,
IStorage pstgPriority,
DWORD  grfMode,
SNB  snbExclude,
DWORD  reserved,
IStorage **  ppstg 
)
static

Definition at line 3298 of file ole2.c.

3299{
3300 ok(0, "unexpected call to OpenStorage\n");
3301 return E_NOTIMPL;
3302}

◆ Storage_OpenStream()

static HRESULT WINAPI Storage_OpenStream ( IStorage iface,
LPCOLESTR  pwcsName,
void reserved1,
DWORD  grfMode,
DWORD  reserved2,
IStream **  ppstm 
)
static

Definition at line 3238 of file ole2.c.

3239{
3240 static const WCHAR ole1W[] = {1,'O','l','e',0};
3241
3242 LARGE_INTEGER pos = {{0}};
3243 HRESULT hr;
3244
3245 ok(!reserved1, "reserved1 = %p\n", reserved1);
3246 ok(!reserved2, "reserved2 = %lx\n", reserved2);
3247 ok(!!ppstm, "ppstm = NULL\n");
3248
3249 if(!lstrcmpW(pwcsName, comp_objW)) {
3250 CHECK_EXPECT2(Storage_OpenStream_CompObj);
3251 ok(grfMode == STGM_SHARE_EXCLUSIVE, "grfMode = %lx\n", grfMode);
3252
3253 *ppstm = comp_obj_stream;
3254 IStream_AddRef(comp_obj_stream);
3255 hr = IStream_Seek(comp_obj_stream, pos, STREAM_SEEK_SET, NULL);
3256 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3257 return S_OK;
3258 }else if(!lstrcmpW(pwcsName, ole1W)) {
3259 CHECK_EXPECT(Storage_OpenStream_Ole);
3260
3261 if (!ole_stream)
3262 {
3263 ok(grfMode == (STGM_SHARE_EXCLUSIVE|STGM_READ), "grfMode = %lx\n", grfMode);
3264
3265 *ppstm = NULL;
3266 return STG_E_FILENOTFOUND;
3267 }
3268
3269 ok(grfMode == (STGM_SHARE_EXCLUSIVE|STGM_READWRITE), "grfMode = %lx\n", grfMode);
3270
3271 *ppstm = ole_stream;
3272 IStream_AddRef(ole_stream);
3273 hr = IStream_Seek(ole_stream, pos, STREAM_SEEK_SET, NULL);
3274 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3275 return S_OK;
3276
3277 }else if(!lstrcmpW(pwcsName, olepres0W)) {
3278 CHECK_EXPECT(Storage_OpenStream_OlePres);
3279 ok(grfMode == (STGM_SHARE_EXCLUSIVE|STGM_READWRITE), "grfMode = %lx\n", grfMode);
3280
3281 *ppstm = olepres_stream;
3282 IStream_AddRef(olepres_stream);
3283 hr = IStream_Seek(olepres_stream, pos, STREAM_SEEK_SET, NULL);
3284 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3285 return S_OK;
3286 }
3287
3288 ok(0, "unexpected call to OpenStream: %s\n", wine_dbgstr_w(pwcsName));
3289 return E_NOTIMPL;
3290}
static IStream * ole_stream
Definition: ole2.c:3172

◆ Storage_QueryInterface()

static HRESULT WINAPI Storage_QueryInterface ( IStorage iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 3176 of file ole2.c.

3177{
3178 ok(0, "unexpected call to QueryInterface\n");
3179 return E_NOTIMPL;
3180}

◆ Storage_Release()

static ULONG WINAPI Storage_Release ( IStorage iface)
static

Definition at line 3188 of file ole2.c.

3189{
3190 ok(0, "unexpected call to Release\n");
3191 return 1;
3192}

◆ Storage_RenameElement()

static HRESULT WINAPI Storage_RenameElement ( IStorage iface,
LPCOLESTR  pwcsOldName,
LPCOLESTR  pwcsNewName 
)
static

Definition at line 3352 of file ole2.c.

3353{
3354 ok(0, "unexpected call to RenameElement\n");
3355 return E_NOTIMPL;
3356}

◆ Storage_Revert()

static HRESULT WINAPI Storage_Revert ( IStorage iface)
static

Definition at line 3322 of file ole2.c.

3323{
3324 ok(0, "unexpected call to Revert\n");
3325 return E_NOTIMPL;
3326}

◆ Storage_SetClass()

static HRESULT WINAPI Storage_SetClass ( IStorage iface,
REFCLSID  clsid 
)
static

Definition at line 3364 of file ole2.c.

3365{
3367 ok(IsEqualIID(clsid, Storage_SetClass_CLSID), "expected %s, got %s\n",
3369 return S_OK;
3370}
static HRESULT WINAPI Storage_SetClass(IStorage *iface, REFCLSID clsid)
Definition: ole2.c:3364
const CLSID * clsid
Definition: msctf.cpp:50

Referenced by Storage_SetClass(), and test_OleDoAutoConvert().

◆ Storage_SetElementTimes()

static HRESULT WINAPI Storage_SetElementTimes ( IStorage iface,
LPCOLESTR  pwcsName,
const FILETIME pctime,
const FILETIME patime,
const FILETIME pmtime 
)
static

Definition at line 3358 of file ole2.c.

3359{
3360 ok(0, "unexpected call to SetElementTimes\n");
3361 return E_NOTIMPL;
3362}

◆ Storage_SetStateBits()

static HRESULT WINAPI Storage_SetStateBits ( IStorage iface,
DWORD  grfStateBits,
DWORD  grfMask 
)
static

Definition at line 3372 of file ole2.c.

3373{
3374 ok(0, "unexpected call to SetStateBits\n");
3375 return E_NOTIMPL;
3376}

◆ Storage_Stat()

static HRESULT WINAPI Storage_Stat ( IStorage iface,
STATSTG *  pstatstg,
DWORD  grfStatFlag 
)
static

Definition at line 3378 of file ole2.c.

3379{
3381 ok(pstatstg != NULL, "pstatstg = NULL\n");
3382 ok(grfStatFlag == STATFLAG_NONAME, "grfStatFlag = %lx\n", grfStatFlag);
3383
3384 memset(pstatstg, 0, sizeof(STATSTG));
3385 pstatstg->type = STGTY_STORAGE;
3386 pstatstg->clsid = CLSID_WineTestOld;
3387 return S_OK;
3388}
static HRESULT WINAPI Storage_Stat(IStorage *iface, STATSTG *pstatstg, DWORD grfStatFlag)
Definition: ole2.c:3378
static const CLSID CLSID_WineTestOld
Definition: ole2.c:78

Referenced by Storage_Stat(), and test_OleDoAutoConvert().

◆ test_data_cache()

static void test_data_cache ( void  )
static

Definition at line 1567 of file ole2.c.

1568{
1569 HRESULT hr;
1570 IOleCache2 *pOleCache;
1571 IOleCache *olecache;
1572 IStorage *pStorage;
1573 IUnknown *unk, *unk2;
1574 IPersistStorage *pPS;
1575 IViewObject *pViewObject;
1576 IOleCacheControl *pOleCacheControl;
1577 IDataObject *pCacheDataObject;
1578 FORMATETC fmtetc;
1579 STGMEDIUM stgmedium;
1580 DWORD dwConnection;
1581 DWORD dwFreeze;
1582 RECTL rcBounds;
1583 HDC hdcMem;
1584 CLSID clsid;
1585 char szSystemDir[MAX_PATH];
1586 WCHAR wszPath[MAX_PATH];
1587 static const WCHAR wszShell32[] = {'\\','s','h','e','l','l','3','2','.','d','l','l',0};
1588
1589 static const struct expected_method methods_cacheinitnew[] =
1590 {
1591 { "AdviseSink_OnViewChange", 0 },
1592 { "AdviseSink_OnViewChange", 0 },
1593 { "draw_continue", 1 },
1594 { "draw_continue_false", 1 },
1595 { "DataObject_DAdvise", 0 },
1596 { "DataObject_DAdvise", 0 },
1597 { "DataObject_DUnadvise", 0 },
1598 { "DataObject_DUnadvise", 0 },
1599 { NULL, 0 }
1600 };
1601 static const struct expected_method methods_cacheload[] =
1602 {
1603 { "AdviseSink_OnViewChange", 0 },
1604 { "draw_continue", 1 },
1605 { "draw_continue", 1 },
1606 { "draw_continue", 1 },
1607 { NULL, 0 }
1608 };
1609 static const struct expected_method methods_cachethenrun[] =
1610 {
1611 { "DataObject_DAdvise", 0 },
1612 { "DataObject_DAdvise", 0 },
1613 { "DataObject_DAdvise", 0 },
1614 { "DataObject_DAdvise", 0 },
1615 { "DataObject_DUnadvise", 0 },
1616 { "DataObject_DUnadvise", 0 },
1617 { "DataObject_DUnadvise", 0 },
1618 { "DataObject_DUnadvise", 0 },
1619 { NULL, 0 }
1620 };
1621
1622 GetSystemDirectoryA(szSystemDir, ARRAY_SIZE(szSystemDir));
1623
1624 expected_method_list = methods_cacheinitnew;
1625
1626 fmtetc.cfFormat = CF_METAFILEPICT;
1627 fmtetc.dwAspect = DVASPECT_ICON;
1628 fmtetc.lindex = -1;
1629 fmtetc.ptd = NULL;
1630 fmtetc.tymed = TYMED_MFPICT;
1631
1633 ok_ole_success(hr, "StgCreateDocfile");
1634
1635 /* aggregation */
1636
1637 /* requested is not IUnknown */
1638 hr = CreateDataCache(&unknown, &CLSID_NULL, &IID_IOleCache2, (void**)&pOleCache);
1639 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
1640
1641 hr = CreateDataCache(&unknown, &CLSID_NULL, &IID_IUnknown, (void**)&unk);
1642 ok(hr == S_OK, "got 0x%08lx\n", hr);
1643
1644 hr = IUnknown_QueryInterface(unk, &IID_IOleCache, (void**)&olecache);
1645 ok(hr == S_OK, "got 0x%08lx\n", hr);
1646 hr = IUnknown_QueryInterface(unk, &IID_IOleCache2, (void**)&pOleCache);
1647 ok(hr == S_OK, "got 0x%08lx\n", hr);
1648 ok(unk != (IUnknown*)olecache, "got %p, expected %p\n", olecache, unk);
1649 ok(unk != (IUnknown*)pOleCache, "got %p, expected %p\n", pOleCache, unk);
1650 IOleCache2_Release(pOleCache);
1651 IOleCache_Release(olecache);
1652 IUnknown_Release(unk);
1653
1654 hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IUnknown, (void**)&unk);
1655 ok(hr == S_OK, "got 0x%08lx\n", hr);
1656 hr = IUnknown_QueryInterface(unk, &IID_IOleCache, (void**)&olecache);
1657 ok(hr == S_OK, "got 0x%08lx\n", hr);
1658 hr = IUnknown_QueryInterface(unk, &IID_IOleCache2, (void**)&pOleCache);
1659 ok(hr == S_OK, "got 0x%08lx\n", hr);
1660 hr = IUnknown_QueryInterface(unk, &IID_IUnknown, (void**)&unk2);
1661 ok(hr == S_OK, "got 0x%08lx\n", hr);
1662 ok(unk == (IUnknown*)olecache, "got %p, expected %p\n", olecache, unk);
1663 ok(unk == (IUnknown*)pOleCache, "got %p, expected %p\n", pOleCache, unk);
1664 ok(unk == unk2, "got %p, expected %p\n", unk2, unk);
1665 IUnknown_Release(unk2);
1666 IOleCache2_Release(pOleCache);
1667 IOleCache_Release(olecache);
1668 IUnknown_Release(unk);
1669
1670 /* Test with new data */
1671
1672 hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IOleCache2, (LPVOID *)&pOleCache);
1673 ok_ole_success(hr, "CreateDataCache");
1674
1675 hr = IOleCache2_QueryInterface(pOleCache, &IID_IPersistStorage, (LPVOID *)&pPS);
1676 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IPersistStorage)");
1677 hr = IOleCache2_QueryInterface(pOleCache, &IID_IViewObject, (LPVOID *)&pViewObject);
1678 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IViewObject)");
1679 hr = IOleCache2_QueryInterface(pOleCache, &IID_IOleCacheControl, (LPVOID *)&pOleCacheControl);
1680 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IOleCacheControl)");
1681
1682 hr = IViewObject_SetAdvise(pViewObject, DVASPECT_ICON, ADVF_PRIMEFIRST, &AdviseSink);
1683 ok_ole_success(hr, "IViewObject_SetAdvise");
1684
1685 hr = IPersistStorage_InitNew(pPS, pStorage);
1686 ok_ole_success(hr, "IPersistStorage_InitNew");
1687
1688 hr = IPersistStorage_IsDirty(pPS);
1689 ok_ole_success(hr, "IPersistStorage_IsDirty");
1690
1691 hr = IPersistStorage_GetClassID(pPS, &clsid);
1692 ok_ole_success(hr, "IPersistStorage_GetClassID");
1693 ok(IsEqualCLSID(&clsid, &IID_NULL), "clsid should be blank\n");
1694
1695 hr = IOleCache2_Uncache(pOleCache, 0xdeadbeef);
1696 ok(hr == OLE_E_NOCONNECTION, "IOleCache_Uncache with invalid value should return OLE_E_NOCONNECTION instead of 0x%lx\n", hr);
1697
1698 /* Both tests crash on NT4 and below. StgCreatePropSetStg is only available on w2k and above. */
1699 if (GetProcAddress(GetModuleHandleA("ole32.dll"), "StgCreatePropSetStg"))
1700 {
1701 hr = IOleCache2_Cache(pOleCache, NULL, 0, &dwConnection);
1702 ok(hr == E_INVALIDARG, "IOleCache_Cache with NULL fmtetc should have returned E_INVALIDARG instead of 0x%08lx\n", hr);
1703
1704 hr = IOleCache2_Cache(pOleCache, NULL, 0, NULL);
1705 ok(hr == E_INVALIDARG, "IOleCache_Cache with NULL pdwConnection should have returned E_INVALIDARG instead of 0x%08lx\n", hr);
1706 }
1707 else
1708 {
1709 skip("tests with NULL parameters will crash on NT4 and below\n");
1710 }
1711
1712 for (fmtetc.cfFormat = CF_TEXT; fmtetc.cfFormat < CF_MAX; fmtetc.cfFormat++)
1713 {
1714 int i;
1715 fmtetc.dwAspect = DVASPECT_THUMBNAIL;
1716 for (i = 0; i < 7; i++)
1717 {
1718 fmtetc.tymed = 1 << i;
1719 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1720 if ((fmtetc.cfFormat == CF_METAFILEPICT && fmtetc.tymed == TYMED_MFPICT) ||
1721 (fmtetc.cfFormat == CF_BITMAP && fmtetc.tymed == TYMED_GDI) ||
1722 (fmtetc.cfFormat == CF_DIB && fmtetc.tymed == TYMED_HGLOBAL) ||
1723 (fmtetc.cfFormat == CF_ENHMETAFILE && fmtetc.tymed == TYMED_ENHMF))
1724 ok(hr == S_OK, "IOleCache_Cache cfFormat = %d, tymed = %ld should have returned S_OK instead of 0x%08lx\n",
1725 fmtetc.cfFormat, fmtetc.tymed, hr);
1726 else if (fmtetc.tymed == TYMED_HGLOBAL)
1728 broken(hr == S_OK && fmtetc.cfFormat == CF_BITMAP) /* Win9x & NT4 */,
1729 "IOleCache_Cache cfFormat = %d, tymed = %ld should have returned CACHE_S_FORMATETC_NOTSUPPORTED instead of 0x%08lx\n",
1730 fmtetc.cfFormat, fmtetc.tymed, hr);
1731 else
1732 ok(hr == DV_E_TYMED, "IOleCache_Cache cfFormat = %d, tymed = %ld should have returned DV_E_TYMED instead of 0x%08lx\n",
1733 fmtetc.cfFormat, fmtetc.tymed, hr);
1734 if (SUCCEEDED(hr))
1735 {
1736 hr = IOleCache2_Uncache(pOleCache, dwConnection);
1737 ok_ole_success(hr, "IOleCache_Uncache");
1738 }
1739 }
1740 }
1741
1742 fmtetc.cfFormat = CF_BITMAP;
1743 fmtetc.dwAspect = DVASPECT_THUMBNAIL;
1744 fmtetc.tymed = TYMED_GDI;
1745 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1746 ok_ole_success(hr, "IOleCache_Cache");
1747
1748 fmtetc.cfFormat = 0;
1749 fmtetc.dwAspect = DVASPECT_ICON;
1750 fmtetc.tymed = TYMED_MFPICT;
1751 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1752 ok_ole_success(hr, "IOleCache_Cache");
1753
1754 MultiByteToWideChar(CP_ACP, 0, szSystemDir, -1, wszPath, ARRAY_SIZE(wszPath));
1755 memcpy(wszPath+lstrlenW(wszPath), wszShell32, sizeof(wszShell32));
1756
1757 fmtetc.cfFormat = CF_METAFILEPICT;
1758 stgmedium.tymed = TYMED_MFPICT;
1759 stgmedium.hMetaFilePict = OleMetafilePictFromIconAndLabel(
1760 LoadIconA(NULL, (LPSTR)IDI_APPLICATION), wszPath, wszPath, 0);
1761 stgmedium.pUnkForRelease = NULL;
1762
1763 fmtetc.dwAspect = DVASPECT_CONTENT;
1764 hr = IOleCache2_SetData(pOleCache, &fmtetc, &stgmedium, FALSE);
1765 ok(hr == OLE_E_BLANK, "IOleCache_SetData for aspect not in cache should have return OLE_E_BLANK instead of 0x%08lx\n", hr);
1766
1767 fmtetc.dwAspect = DVASPECT_ICON;
1768 hr = IOleCache2_SetData(pOleCache, &fmtetc, &stgmedium, FALSE);
1769 ok_ole_success(hr, "IOleCache_SetData");
1770 ReleaseStgMedium(&stgmedium);
1771
1772 hr = IViewObject_Freeze(pViewObject, DVASPECT_ICON, -1, NULL, &dwFreeze);
1773 todo_wine {
1774 ok_ole_success(hr, "IViewObject_Freeze");
1775 hr = IViewObject_Freeze(pViewObject, DVASPECT_CONTENT, -1, NULL, &dwFreeze);
1776 ok(hr == OLE_E_BLANK, "IViewObject_Freeze with uncached aspect should have returned OLE_E_BLANK instead of 0x%08lx\n", hr);
1777 }
1778
1779 rcBounds.left = 0;
1780 rcBounds.top = 0;
1781 rcBounds.right = 100;
1782 rcBounds.bottom = 100;
1784
1785 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1786 ok_ole_success(hr, "IViewObject_Draw");
1787
1788 hr = IViewObject_Draw(pViewObject, DVASPECT_CONTENT, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1789 ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08lx\n", hr);
1790
1791 /* a NULL draw_continue fn ptr */
1792 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, NULL, 0xdeadbeef);
1793 ok_ole_success(hr, "IViewObject_Draw");
1794
1795 /* draw_continue that returns FALSE to abort drawing */
1796 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue_false, 0xdeadbeef);
1797 ok(hr == E_ABORT ||
1798 broken(hr == S_OK), /* win9x may skip the callbacks */
1799 "IViewObject_Draw with draw_continue_false returns 0x%08lx\n", hr);
1800
1802
1803 hr = IOleCacheControl_OnRun(pOleCacheControl, &DataObject);
1804 ok_ole_success(hr, "IOleCacheControl_OnRun");
1805
1806 hr = IPersistStorage_Save(pPS, pStorage, TRUE);
1807 ok_ole_success(hr, "IPersistStorage_Save");
1808
1809 hr = IPersistStorage_SaveCompleted(pPS, NULL);
1810 ok_ole_success(hr, "IPersistStorage_SaveCompleted");
1811
1812 hr = IPersistStorage_IsDirty(pPS);
1813 ok(hr == S_FALSE, "IPersistStorage_IsDirty should have returned S_FALSE instead of 0x%lx\n", hr);
1814
1815 IPersistStorage_Release(pPS);
1816 IViewObject_Release(pViewObject);
1817 IOleCache2_Release(pOleCache);
1818 IOleCacheControl_Release(pOleCacheControl);
1819
1821
1822 /* Test with loaded data */
1823 expected_method_list = methods_cacheload;
1824
1825 hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IOleCache2, (LPVOID *)&pOleCache);
1826 ok_ole_success(hr, "CreateDataCache");
1827
1828 hr = IOleCache2_QueryInterface(pOleCache, &IID_IPersistStorage, (LPVOID *)&pPS);
1829 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IPersistStorage)");
1830 hr = IOleCache2_QueryInterface(pOleCache, &IID_IViewObject, (LPVOID *)&pViewObject);
1831 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IViewObject)");
1832
1833 hr = IViewObject_SetAdvise(pViewObject, DVASPECT_ICON, ADVF_PRIMEFIRST, &AdviseSink);
1834 ok_ole_success(hr, "IViewObject_SetAdvise");
1835
1836 hr = IPersistStorage_Load(pPS, pStorage);
1837 ok_ole_success(hr, "IPersistStorage_Load");
1838
1839 hr = IPersistStorage_IsDirty(pPS);
1840 ok(hr == S_FALSE, "IPersistStorage_IsDirty should have returned S_FALSE instead of 0x%lx\n", hr);
1841
1842 fmtetc.cfFormat = 0;
1843 fmtetc.dwAspect = DVASPECT_ICON;
1844 fmtetc.lindex = -1;
1845 fmtetc.ptd = NULL;
1846 fmtetc.tymed = TYMED_MFPICT;
1847 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1848 ok(hr == CACHE_S_SAMECACHE, "IOleCache_Cache with already loaded data format type should return CACHE_S_SAMECACHE instead of 0x%lx\n", hr);
1849
1850 rcBounds.left = 0;
1851 rcBounds.top = 0;
1852 rcBounds.right = 100;
1853 rcBounds.bottom = 100;
1855
1856 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1857 ok_ole_success(hr, "IViewObject_Draw");
1858
1859 hr = IViewObject_Draw(pViewObject, DVASPECT_CONTENT, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1860 ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08lx\n", hr);
1861
1862 /* unload the cached storage object, causing it to be reloaded */
1863 hr = IOleCache2_DiscardCache(pOleCache, DISCARDCACHE_NOSAVE);
1864 ok_ole_success(hr, "IOleCache2_DiscardCache");
1865 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1866 ok_ole_success(hr, "IViewObject_Draw");
1867
1868 /* unload the cached storage object, but don't allow it to be reloaded */
1869 hr = IPersistStorage_HandsOffStorage(pPS);
1870 ok_ole_success(hr, "IPersistStorage_HandsOffStorage");
1871 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1872 ok_ole_success(hr, "IViewObject_Draw");
1873 hr = IOleCache2_DiscardCache(pOleCache, DISCARDCACHE_NOSAVE);
1874 ok_ole_success(hr, "IOleCache2_DiscardCache");
1875 hr = IViewObject_Draw(pViewObject, DVASPECT_ICON, -1, NULL, NULL, NULL, hdcMem, &rcBounds, NULL, draw_continue, 0xdeadbeef);
1876 ok(hr == OLE_E_BLANK, "IViewObject_Draw with uncached aspect should have returned OLE_E_BLANK instead of 0x%08lx\n", hr);
1877
1879
1880 hr = IOleCache2_InitCache(pOleCache, &DataObject);
1881 ok(hr == CACHE_E_NOCACHE_UPDATED, "IOleCache_InitCache should have returned CACHE_E_NOCACHE_UPDATED instead of 0x%08lx\n", hr);
1882
1883 IPersistStorage_Release(pPS);
1884 IViewObject_Release(pViewObject);
1885 IOleCache2_Release(pOleCache);
1886
1888
1889 hr = CreateDataCache(NULL, &CLSID_NULL, &IID_IOleCache2, (LPVOID *)&pOleCache);
1890 ok_ole_success(hr, "CreateDataCache");
1891
1892 expected_method_list = methods_cachethenrun;
1893
1894 hr = IOleCache2_QueryInterface(pOleCache, &IID_IDataObject, (LPVOID *)&pCacheDataObject);
1895 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IDataObject)");
1896 hr = IOleCache2_QueryInterface(pOleCache, &IID_IOleCacheControl, (LPVOID *)&pOleCacheControl);
1897 ok_ole_success(hr, "IOleCache_QueryInterface(IID_IOleCacheControl)");
1898
1899 fmtetc.cfFormat = CF_METAFILEPICT;
1900 fmtetc.dwAspect = DVASPECT_CONTENT;
1901 fmtetc.tymed = TYMED_MFPICT;
1902
1903 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1904 ok_ole_success(hr, "IOleCache_Cache");
1905
1906 hr = IDataObject_GetData(pCacheDataObject, &fmtetc, &stgmedium);
1907 ok(hr == OLE_E_BLANK, "got %08lx\n", hr);
1908
1909 fmtetc.cfFormat = cf_test_1;
1910 fmtetc.dwAspect = DVASPECT_CONTENT;
1911 fmtetc.tymed = TYMED_HGLOBAL;
1912
1913 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1914 ok(hr == CACHE_S_FORMATETC_NOTSUPPORTED, "got %08lx\n", hr);
1915
1916 hr = IDataObject_GetData(pCacheDataObject, &fmtetc, &stgmedium);
1917 ok(hr == OLE_E_BLANK, "got %08lx\n", hr);
1918
1919 fmtetc.cfFormat = cf_test_2;
1920 hr = IOleCache2_Cache(pOleCache, &fmtetc, ADVF_PRIMEFIRST, &dwConnection);
1921 ok(hr == CACHE_S_FORMATETC_NOTSUPPORTED, "got %08lx\n", hr);
1922
1923 hr = IDataObject_GetData(pCacheDataObject, &fmtetc, &stgmedium);
1924 ok(hr == OLE_E_BLANK, "got %08lx\n", hr);
1925
1926 hr = IOleCacheControl_OnRun(pOleCacheControl, &DataObject);
1927 ok_ole_success(hr, "IOleCacheControl_OnRun");
1928
1929 fmtetc.cfFormat = cf_test_3;
1930 hr = IOleCache2_Cache(pOleCache, &fmtetc, 0, &dwConnection);
1931 ok(hr == CACHE_S_FORMATETC_NOTSUPPORTED, "got %08lx\n", hr);
1932
1933 fmtetc.cfFormat = cf_test_1;
1934 hr = IDataObject_GetData(pCacheDataObject, &fmtetc, &stgmedium);
1935 ok(hr == OLE_E_BLANK, "got %08lx\n", hr);
1936
1937 fmtetc.cfFormat = cf_test_2;
1938 hr = IDataObject_GetData(pCacheDataObject, &fmtetc, &stgmedium);
1939 ok(hr == S_OK, "got %08lx\n", hr);
1940 ReleaseStgMedium(&stgmedium);
1941
1942 fmtetc.cfFormat = cf_test_3;
1943 hr = IDataObject_GetData(pCacheDataObject, &fmtetc, &stgmedium);
1944 ok(hr == OLE_E_BLANK, "got %08lx\n", hr);
1945
1946 IOleCacheControl_Release(pOleCacheControl);
1947 IDataObject_Release(pCacheDataObject);
1948 IOleCache2_Release(pOleCache);
1949
1951
1952 IStorage_Release(pStorage);
1953}
#define skip(...)
Definition: atltest.h:64
#define broken(x)
Definition: atltest.h:178
#define CF_MAX
Definition: constants.h:412
#define ARRAY_SIZE(A)
Definition: main.h:20
HRESULT WINAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid, REFIID riid, LPVOID *ppvObj)
Definition: datacache.c:3029
#define E_INVALIDARG
Definition: ddrawi.h:101
#define GetProcAddress(x, y)
Definition: compat.h:753
#define MAX_PATH
Definition: compat.h:34
#define lstrlenW
Definition: compat.h:750
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
Definition: path.c:2202
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2014
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static BOOL STDMETHODCALLTYPE draw_continue_false(ULONG_PTR param)
Definition: ole2.c:1258
static IUnknown unknown
Definition: ole2.c:1532
static IAdviseSink AdviseSink
Definition: ole2.c:1332
#define CHECK_NO_EXTRA_METHODS()
Definition: ole2.c:185
static BOOL STDMETHODCALLTYPE draw_continue(ULONG_PTR param)
Definition: ole2.c:1252
static IDataObject DataObject
Definition: ole2.c:1501
HGLOBAL WINAPI OleMetafilePictFromIconAndLabel(HICON hIcon, LPOLESTR lpszLabel, LPOLESTR lpszSourceFile, UINT iIconIndex)
Definition: ole32_main.c:40
const GUID IID_IViewObject
const GUID IID_IOleCache2
const GUID IID_IOleCacheControl
#define CLSID_NULL
Definition: guiddef.h:99
#define IID_NULL
Definition: guiddef.h:98
long bottom
Definition: polytest.cpp:53
long right
Definition: polytest.cpp:53
long top
Definition: polytest.cpp:53
long left
Definition: polytest.cpp:53
HDC hdcMem
Definition: welcome.c:104
#define CACHE_S_SAMECACHE
Definition: winerror.h:3832
#define OLE_E_NOCONNECTION
Definition: winerror.h:3729
#define CACHE_S_FORMATETC_NOTSUPPORTED
Definition: winerror.h:3829
#define CACHE_E_NOCACHE_UPDATED
Definition: winerror.h:3831
#define DV_E_TYMED
Definition: winerror.h:3749
#define E_ABORT
Definition: winerror.h:3481
#define OLE_E_BLANK
Definition: winerror.h:3732
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
BOOL WINAPI DeleteDC(_In_ HDC)
#define IDI_APPLICATION
Definition: winuser.h:712
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE hInstance, _In_ LPCSTR lpIconName)
Definition: cursoricon.c:2429
char * LPSTR
Definition: xmlstorage.h:182

Referenced by START_TEST().

◆ test_data_cache_cache()

static void test_data_cache_cache ( void  )
static

Definition at line 2103 of file ole2.c.

2104{
2105 HRESULT hr;
2108 FORMATETC fmt;
2109 DWORD conn;
2110 STGMEDIUM med;
2111 STATDATA expect[] =
2112 {
2113 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 0 },
2114 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 0 },
2115 {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 0 },
2116 {{ CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, 0, NULL, 0 }
2117 };
2118 STATDATA view_caching[] =
2119 {
2120 {{ 0, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, 0, NULL, 0 },
2121 {{ 0, 0, DVASPECT_THUMBNAIL, -1, TYMED_HGLOBAL }, 0, NULL, 0 },
2122 {{ 0, 0, DVASPECT_DOCPRINT, -1, TYMED_HGLOBAL }, 0, NULL, 0 },
2123 {{ CF_METAFILEPICT, 0, DVASPECT_ICON, -1, TYMED_MFPICT }, 0, NULL, 0 }
2124 };
2125
2127 ok( hr == S_OK, "got %08lx\n", hr );
2128
2129 /* create a dib entry which will also create a bitmap entry too */
2130 fmt.cfFormat = CF_DIB;
2131 fmt.ptd = NULL;
2132 fmt.dwAspect = DVASPECT_CONTENT;
2133 fmt.lindex = -1;
2134 fmt.tymed = TYMED_HGLOBAL;
2135
2136 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2137 ok( hr == S_OK, "got %08lx\n", hr );
2138 ok( conn == 2, "got %ld\n", conn );
2139 expect[0].dwConnection = conn;
2140 expect[1].dwConnection = conn;
2141
2143
2144 /* now try to add a bitmap */
2145 fmt.cfFormat = CF_BITMAP;
2146 fmt.tymed = TYMED_GDI;
2147
2148 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2149 ok( hr == CACHE_S_SAMECACHE, "got %08lx\n", hr );
2150
2151 /* metafile */
2152 fmt.cfFormat = CF_METAFILEPICT;
2153 fmt.tymed = TYMED_MFPICT;
2154
2155 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2156 ok( hr == S_OK, "got %08lx\n", hr );
2157 ok( conn == 3, "got %ld\n", conn );
2158 expect[2].dwConnection = conn;
2159
2161
2162 /* enhmetafile */
2163 fmt.cfFormat = CF_ENHMETAFILE;
2164 fmt.tymed = TYMED_ENHMF;
2165
2166 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2167 ok( hr == S_OK, "got %08lx\n", hr );
2168 ok( conn == 4, "got %ld\n", conn );
2169 expect[3].dwConnection = conn;
2170
2172
2173 /* uncache everything */
2174 hr = IOleCache2_Uncache( cache, expect[3].dwConnection );
2175 ok( hr == S_OK, "got %08lx\n", hr );
2176 hr = IOleCache2_Uncache( cache, expect[2].dwConnection );
2177 ok( hr == S_OK, "got %08lx\n", hr );
2178 hr = IOleCache2_Uncache( cache, expect[0].dwConnection );
2179 ok( hr == S_OK, "got %08lx\n", hr );
2180 hr = IOleCache2_Uncache( cache, expect[0].dwConnection );
2181 ok( hr == OLE_E_NOCONNECTION, "got %08lx\n", hr );
2182
2184
2185 /* just create a bitmap entry which again adds both dib and bitmap */
2186 fmt.cfFormat = CF_BITMAP;
2187 fmt.tymed = TYMED_GDI;
2188
2189 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2190 ok( hr == S_OK, "got %08lx\n", hr );
2191
2192 expect[0].dwConnection = conn;
2193 expect[1].dwConnection = conn;
2194
2196
2197 /* Try setting a 1x1 bitmap */
2198 hr = IOleCache2_QueryInterface( cache, &IID_IDataObject, (void **) &data );
2199 ok( hr == S_OK, "got %08lx\n", hr );
2200
2201 create_bitmap( &med );
2202
2203 hr = IOleCache2_SetData( cache, &fmt, &med, TRUE );
2204 ok( hr == S_OK, "got %08lx\n", hr );
2205
2206 hr = IDataObject_GetData( data, &fmt, &med );
2207 ok( hr == S_OK, "got %08lx\n", hr );
2208 ok( med.tymed == TYMED_GDI, "got %ld\n", med.tymed );
2209 check_bitmap_size( med.hBitmap, 1, 1 );
2210 ReleaseStgMedium( &med );
2211
2212 fmt.cfFormat = CF_DIB;
2213 fmt.tymed = TYMED_HGLOBAL;
2214 hr = IDataObject_GetData( data, &fmt, &med );
2215 ok( hr == S_OK, "got %08lx\n", hr );
2216 ok( med.tymed == TYMED_HGLOBAL, "got %ld\n", med.tymed );
2217 check_dib_size( med.hGlobal, 1, 1 );
2218 ReleaseStgMedium( &med );
2219
2220 /* Now set a 2x1 dib */
2221 fmt.cfFormat = CF_DIB;
2222 fmt.tymed = TYMED_HGLOBAL;
2223 create_dib( &med );
2224
2225 hr = IOleCache2_SetData( cache, &fmt, &med, TRUE );
2226 ok( hr == S_OK, "got %08lx\n", hr );
2227
2228 fmt.cfFormat = CF_BITMAP;
2229 fmt.tymed = TYMED_GDI;
2230 hr = IDataObject_GetData( data, &fmt, &med );
2231 ok( hr == S_OK, "got %08lx\n", hr );
2232 ok( med.tymed == TYMED_GDI, "got %ld\n", med.tymed );
2233 check_bitmap_size( med.hBitmap, 2, 1 );
2234 ReleaseStgMedium( &med );
2235
2236 fmt.cfFormat = CF_DIB;
2237 fmt.tymed = TYMED_HGLOBAL;
2238 hr = IDataObject_GetData( data, &fmt, &med );
2239 ok( hr == S_OK, "got %08lx\n", hr );
2240 ok( med.tymed == TYMED_HGLOBAL, "got %ld\n", med.tymed );
2241 check_dib_size( med.hGlobal, 2, 1 );
2242 ReleaseStgMedium( &med );
2243
2244 /* uncache everything */
2245 hr = IOleCache2_Uncache( cache, conn );
2246 ok( hr == S_OK, "got %08lx\n", hr );
2247
2248 /* view caching */
2249 fmt.cfFormat = 0;
2250 fmt.tymed = TYMED_ENHMF;
2251 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2252 ok( hr == S_OK, "got %08lx\n", hr );
2253 view_caching[0].dwConnection = conn;
2254
2255 fmt.tymed = TYMED_HGLOBAL;
2256 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2257 ok( hr == CACHE_S_SAMECACHE, "got %08lx\n", hr );
2258
2259 fmt.dwAspect = DVASPECT_THUMBNAIL;
2260 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2261 ok( hr == S_OK, "got %08lx\n", hr );
2262 view_caching[1].dwConnection = conn;
2263
2264 fmt.dwAspect = DVASPECT_DOCPRINT;
2265 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2266 ok( hr == S_OK, "got %08lx\n", hr );
2267 view_caching[2].dwConnection = conn;
2268
2269 /* DVASPECT_ICON view cache gets mapped to CF_METAFILEPICT */
2270 fmt.dwAspect = DVASPECT_ICON;
2271 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2272 ok( hr == S_OK, "got %08lx\n", hr );
2273 view_caching[3].dwConnection = conn;
2274
2275 check_enum_cache( cache, view_caching, 4 );
2276
2277 /* uncache everything */
2278 hr = IOleCache2_Uncache( cache, view_caching[3].dwConnection );
2279 ok( hr == S_OK, "got %08lx\n", hr );
2280 hr = IOleCache2_Uncache( cache, view_caching[2].dwConnection );
2281 ok( hr == S_OK, "got %08lx\n", hr );
2282 hr = IOleCache2_Uncache( cache, view_caching[1].dwConnection );
2283 ok( hr == S_OK, "got %08lx\n", hr );
2284 hr = IOleCache2_Uncache( cache, view_caching[0].dwConnection );
2285 ok( hr == S_OK, "got %08lx\n", hr );
2286
2287 /* Only able to set cfFormat == CF_METAFILEPICT (or == 0, see above) for DVASPECT_ICON */
2288 fmt.dwAspect = DVASPECT_ICON;
2289 fmt.cfFormat = CF_DIB;
2290 fmt.tymed = TYMED_HGLOBAL;
2291 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2292 ok( hr == DV_E_FORMATETC, "got %08lx\n", hr );
2293 fmt.cfFormat = CF_BITMAP;
2294 fmt.tymed = TYMED_GDI;
2295 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2296 ok( hr == DV_E_FORMATETC, "got %08lx\n", hr );
2297 fmt.cfFormat = CF_ENHMETAFILE;
2298 fmt.tymed = TYMED_ENHMF;
2299 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2300 ok( hr == DV_E_FORMATETC, "got %08lx\n", hr );
2301 fmt.cfFormat = CF_METAFILEPICT;
2302 fmt.tymed = TYMED_MFPICT;
2303 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2304 ok( hr == S_OK, "got %08lx\n", hr );
2305
2306 /* uncache everything */
2307 hr = IOleCache2_Uncache( cache, conn );
2308 ok( hr == S_OK, "got %08lx\n", hr );
2309
2310 /* tymed == 0 */
2311 fmt.cfFormat = CF_ENHMETAFILE;
2312 fmt.dwAspect = DVASPECT_CONTENT;
2313 fmt.tymed = 0;
2314 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2315 ok( hr == DV_E_TYMED, "got %08lx\n", hr );
2316
2317 IDataObject_Release( data );
2318 IOleCache2_Release( cache );
2319
2320 /* tests for a static class cache */
2322
2323 fmt.cfFormat = CF_DIB;
2324 fmt.dwAspect = DVASPECT_CONTENT;
2325 fmt.tymed = TYMED_HGLOBAL;
2326 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2327 ok( hr == CACHE_S_SAMECACHE, "got %08lx\n", hr );
2328
2329 /* aspect other than DVASPECT_CONTENT should fail */
2330 fmt.dwAspect = DVASPECT_THUMBNAIL;
2331 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2332 ok( FAILED(hr), "got %08lx\n", hr );
2333
2334 fmt.dwAspect = DVASPECT_DOCPRINT;
2335 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2336 ok( FAILED(hr), "got %08lx\n", hr );
2337
2338 /* try caching another clip format */
2339 fmt.cfFormat = CF_METAFILEPICT;
2340 fmt.dwAspect = DVASPECT_CONTENT;
2341 fmt.tymed = TYMED_MFPICT;
2342 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2343 ok( FAILED(hr), "got %08lx\n", hr );
2344
2345 /* As an exception, it's possible to add an icon aspect */
2346 fmt.cfFormat = CF_METAFILEPICT;
2347 fmt.dwAspect = DVASPECT_ICON;
2348 fmt.tymed = TYMED_MFPICT;
2349 hr = IOleCache2_Cache( cache, &fmt, 0, &conn );
2350 ok( hr == S_OK, "got %08lx\n", hr );
2351
2352 IOleCache2_Release( cache );
2353}
#define FAILED(hr)
Definition: intsafe.h:51
static void check_dib_size(HGLOBAL h, int cx, int cy)
Definition: ole2.c:2093
static void check_bitmap_size(HBITMAP h, int cx, int cy)
Definition: ole2.c:2084
static void check_enum_cache(IOleCache2 *cache, const STATDATA *expect, int num)
Definition: ole2.c:1534
#define DV_E_FORMATETC
Definition: winerror.h:3744

Referenced by START_TEST().

◆ test_data_cache_contents()

static void test_data_cache_contents ( void  )
static

Definition at line 4401 of file ole2.c.

4402{
4403 HRESULT hr;
4404 IStorage *doc1, *doc2;
4406 IPersistStorage *stg;
4407 int i, enumerated_streams, matched_streams;
4408 static const struct
4409 {
4410 const struct storage_def *in;
4411 const struct storage_def *out;
4412 } test_data[] =
4413 {
4424 };
4425
4426 for (i = 0; i < ARRAY_SIZE(test_data); i++)
4427 {
4428 if (winetest_debug > 1)
4429 trace("start testing storage def %d\n", i);
4430
4432 if (!doc1) continue;
4433
4434 enumerated_streams = matched_streams = -1;
4435 check_storage_contents(doc1, test_data[i].in, &enumerated_streams, &matched_streams);
4436 ok(enumerated_streams == matched_streams, "%d in: enumerated %d != matched %d\n", i,
4437 enumerated_streams, matched_streams);
4438 ok(enumerated_streams == test_data[i].in->stream_count, "%d: created %d != def streams %d\n", i,
4439 enumerated_streams, test_data[i].in->stream_count);
4440
4442 ok(hr == S_OK, "unexpected %#lx\n", hr);
4443 hr = IOleCache2_QueryInterface(cache, &IID_IPersistStorage, (void **)&stg);
4444 ok(hr == S_OK, "unexpected %#lx\n", hr);
4445 hr = IPersistStorage_Load(stg, doc1);
4446 ok(hr == S_OK, "unexpected %#lx\n", hr);
4447
4448 IStorage_Release(doc1);
4449
4451 ok(hr == S_OK, "unexpected %#lx\n", hr);
4452
4453 hr = IPersistStorage_IsDirty(stg);
4454 ok(hr == S_FALSE, "%d: unexpected %#lx\n", i, hr);
4455
4456 hr = IPersistStorage_Save(stg, doc2, FALSE);
4457 ok(hr == S_OK, "unexpected %#lx\n", hr);
4458
4459 IPersistStorage_Release(stg);
4460
4461 enumerated_streams = matched_streams = -1;
4462 check_storage_contents(doc2, test_data[i].out, &enumerated_streams, &matched_streams);
4464 ok(enumerated_streams == matched_streams, "%d out: enumerated %d != matched %d\n", i,
4465 enumerated_streams, matched_streams);
4467 || test_data[i].in == &stg_def_6))
4468 ok(enumerated_streams == test_data[i].out->stream_count, "%d: saved streams %d != def streams %d\n", i,
4469 enumerated_streams, test_data[i].out->stream_count);
4470
4471 IStorage_Release(doc2);
4472
4473 if (winetest_debug > 1)
4474 trace("done testing storage def %d\n", i);
4475 }
4476}
GLuint in
Definition: glext.h:9616
static IStorage * create_storage_from_def(const struct storage_def *stg_def)
Definition: ole2.c:4042
static const struct storage_def stg_def_9
Definition: ole2.c:3824
static const struct storage_def stg_def_1
Definition: ole2.c:3726
static const struct storage_def stg_def_7
Definition: ole2.c:3806
static const struct storage_def stg_def_6
Definition: ole2.c:3792
static const struct storage_def stg_def_0_saved
Definition: ole2.c:3722
static const struct storage_def stg_def_9_saved
Definition: ole2.c:3829
static const struct storage_def stg_def_4
Definition: ole2.c:3764
static const struct storage_def stg_def_5_saved
Definition: ole2.c:3787
static const struct storage_def stg_def_1_saved
Definition: ole2.c:3732
static const struct storage_def stg_def_2
Definition: ole2.c:3737
static const struct storage_def stg_def_8
Definition: ole2.c:3815
static void check_storage_contents(IStorage *stg, const struct storage_def *stg_def, int *enumerated_streams, int *matched_streams)
Definition: ole2.c:3857
static const struct storage_def stg_def_7_saved
Definition: ole2.c:3811
static const struct storage_def stg_def_2_saved
Definition: ole2.c:3743
static const struct storage_def stg_def_0
Definition: ole2.c:3717
static const struct storage_def stg_def_3
Definition: ole2.c:3748
static const struct storage_def stg_def_5
Definition: ole2.c:3778
static const struct storage_def stg_def_6_saved
Definition: ole2.c:3801
static const struct storage_def stg_def_3_saved
Definition: ole2.c:3757
static const struct storage_def stg_def_8_saved
Definition: ole2.c:3820
static const struct storage_def stg_def_4_saved
Definition: ole2.c:3773
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by START_TEST().

◆ test_data_cache_dib_contents_stream()

static void test_data_cache_dib_contents_stream ( int  num)
static

Definition at line 1994 of file ole2.c.

1995{
1996 HRESULT hr;
1997 IUnknown *unk;
1998 IPersistStorage *persist;
2001 IStorage *stg;
2003 FORMATETC fmt = {CF_DIB, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
2004 STGMEDIUM med;
2005 CLSID cls;
2006 SIZEL sz;
2007 BYTE *ptr;
2008 BITMAPINFOHEADER expect_info;
2009 STATDATA enum_expect[] =
2010 {
2011 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 1 },
2012 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 1 },
2013 };
2014
2016 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2017 hr = IUnknown_QueryInterface( unk, &IID_IPersistStorage, (void **)&persist );
2018 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2019 hr = IUnknown_QueryInterface( unk, &IID_IDataObject, (void **)&data );
2020 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2021 hr = IUnknown_QueryInterface( unk, &IID_IViewObject2, (void **)&view );
2022 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2023 hr = IUnknown_QueryInterface( unk, &IID_IOleCache2, (void **)&cache );
2024 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2025
2026 stg = create_storage( num );
2027
2028 hr = IPersistStorage_Load( persist, stg );
2029 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2030 IStorage_Release( stg );
2031
2032 hr = IPersistStorage_GetClassID( persist, &cls );
2033 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2034 ok( IsEqualCLSID( &cls, &CLSID_Picture_Dib ), "class id mismatch\n" );
2035
2036 hr = IDataObject_GetData( data, &fmt, &med );
2037 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2038 ok( med.tymed == TYMED_HGLOBAL, "got %lx\n", med.tymed );
2039 ok( GlobalSize( med.hGlobal ) >= sizeof(dib_white) - sizeof(BITMAPFILEHEADER),
2040 "got %Iu\n", GlobalSize( med.hGlobal ) );
2041 ptr = GlobalLock( med.hGlobal );
2042
2043 expect_info = *(BITMAPINFOHEADER *)(file_dib + sizeof(BITMAPFILEHEADER));
2044 if (expect_info.biXPelsPerMeter == 0 || expect_info.biYPelsPerMeter == 0)
2045 {
2046 HDC hdc = GetDC( 0 );
2047 expect_info.biXPelsPerMeter = MulDiv( GetDeviceCaps( hdc, LOGPIXELSX ), 10000, 254 );
2048 expect_info.biYPelsPerMeter = MulDiv( GetDeviceCaps( hdc, LOGPIXELSY ), 10000, 254 );
2049 ReleaseDC( 0, hdc );
2050 }
2051 ok( !memcmp( ptr, &expect_info, sizeof(expect_info) ), "mismatch\n" );
2052 ok( !memcmp( ptr + sizeof(expect_info), file_dib + sizeof(BITMAPFILEHEADER) + sizeof(expect_info),
2053 sizeof(file_dib) - sizeof(BITMAPFILEHEADER) - sizeof(expect_info) ), "mismatch\n" );
2054 GlobalUnlock( med.hGlobal );
2055 ReleaseStgMedium( &med );
2056
2057 check_enum_cache( cache, enum_expect, 2 );
2058
2059 hr = IViewObject2_GetExtent( view, DVASPECT_CONTENT, -1, NULL, &sz );
2060 ok( SUCCEEDED(hr), "got %08lx\n", hr );
2061 if (num == 0)
2062 {
2063 ok( sz.cx == 1000, "got %ld\n", sz.cx );
2064 ok( sz.cy == 250, "got %ld\n", sz.cy );
2065 }
2066 else
2067 {
2068 HDC hdc = GetDC( 0 );
2069 LONG x = 2 * 2540 / GetDeviceCaps( hdc, LOGPIXELSX );
2070 LONG y = 1 * 2540 / GetDeviceCaps( hdc, LOGPIXELSY );
2071 ok( sz.cx == x, "got %ld %ld\n", sz.cx, x );
2072 ok( sz.cy == y, "got %ld %ld\n", sz.cy, y );
2073
2074 ReleaseDC( 0, hdc );
2075 }
2076
2077 IOleCache2_Release( cache );
2078 IViewObject2_Release( view );
2079 IDataObject_Release( data );
2080 IPersistStorage_Release( persist );
2081 IUnknown_Release( unk );
2082}
const CLSID CLSID_Picture_Metafile
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
static HGLOBAL create_storage(void)
Definition: clipboard.c:1316
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
const GUID IID_IViewObject2
long LONG
Definition: pedump.c:60
LONG biYPelsPerMeter
Definition: amvideo.idl:38
LONG biXPelsPerMeter
Definition: amvideo.idl:37
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define LOGPIXELSY
Definition: wingdi.h:719
#define LOGPIXELSX
Definition: wingdi.h:718

Referenced by START_TEST().

◆ test_data_cache_init()

static void test_data_cache_init ( void  )
static

Definition at line 2356 of file ole2.c.

2357{
2358 HRESULT hr;
2360 IPersistStorage *persist;
2361 int i;
2362 CLSID clsid;
2363 static const STATDATA enum_expect[] =
2364 {
2365 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 1 },
2366 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 1 },
2367 {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 1 },
2368 {{ CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF }, 0, NULL, 1 }
2369 };
2370 static const struct
2371 {
2372 const CLSID *clsid;
2373 int enum_start, enum_num;
2374 } data[] =
2375 {
2376 { &CLSID_NULL, 0, 0 },
2377 { &CLSID_WineTestOld, 0, 0 },
2378 { &CLSID_Picture_Dib, 0, 2 },
2379 { &CLSID_Picture_Metafile, 2, 1 },
2380 { &CLSID_Picture_EnhMetafile, 3, 1 }
2381 };
2382
2383 for (i = 0; i < ARRAY_SIZE(data); i++)
2384 {
2385 hr = CreateDataCache( NULL, data[i].clsid, &IID_IOleCache2, (void **)&cache );
2386 ok( hr == S_OK, "got %08lx\n", hr );
2387
2388 check_enum_cache( cache, enum_expect + data[i].enum_start , data[i].enum_num );
2389
2390 IOleCache2_QueryInterface( cache, &IID_IPersistStorage, (void **) &persist );
2391 hr = IPersistStorage_GetClassID( persist, &clsid );
2392 ok( hr == S_OK, "got %08lx\n", hr );
2393 ok( IsEqualCLSID( &clsid, data[i].clsid ), "class id mismatch %s %s\n", wine_dbgstr_guid( &clsid ),
2395
2396 IPersistStorage_Release( persist );
2397 IOleCache2_Release( cache );
2398 }
2399}
const CLSID CLSID_Picture_EnhMetafile

Referenced by START_TEST().

◆ test_data_cache_initnew()

static void test_data_cache_initnew ( void  )
static

Definition at line 2401 of file ole2.c.

2402{
2403 HRESULT hr;
2405 IPersistStorage *persist;
2406 IStorage *stg_dib, *stg_mf, *stg_wine;
2407 CLSID clsid;
2408 static const STATDATA initnew_expect[] =
2409 {
2410 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 1 },
2411 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 1 },
2412 };
2413 static const STATDATA initnew2_expect[] =
2414 {
2415 {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 1 },
2416 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 2 },
2417 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 2 },
2418 };
2419 static const STATDATA initnew3_expect[] =
2420 {
2421 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 1 },
2422 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 1 },
2423 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 2 },
2424 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 2 },
2425 {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 3 },
2426 };
2427 static const STATDATA initnew4_expect[] =
2428 {
2429 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 2 },
2430 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 2 },
2431 {{ CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT }, 0, NULL, 3 },
2432 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 4 },
2433 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 4 },
2434 };
2435
2437 ok( hr == S_OK, "got %08lx\n", hr);
2438 hr = IStorage_SetClass( stg_dib, &CLSID_Picture_Dib );
2439 ok( hr == S_OK, "got %08lx\n", hr);
2440
2442 ok( hr == S_OK, "got %08lx\n", hr);
2443 hr = IStorage_SetClass( stg_mf, &CLSID_Picture_Metafile );
2444 ok( hr == S_OK, "got %08lx\n", hr);
2445
2447 ok( hr == S_OK, "got %08lx\n", hr);
2448 hr = IStorage_SetClass( stg_wine, &CLSID_WineTestOld );
2449 ok( hr == S_OK, "got %08lx\n", hr);
2450
2452 ok( hr == S_OK, "got %08lx\n", hr );
2453 IOleCache2_QueryInterface( cache, &IID_IPersistStorage, (void **) &persist );
2454
2455 hr = IPersistStorage_InitNew( persist, stg_dib );
2456 ok( hr == S_OK, "got %08lx\n", hr);
2457
2458 hr = IPersistStorage_GetClassID( persist, &clsid );
2459 ok( hr == S_OK, "got %08lx\n", hr );
2460 ok( IsEqualCLSID( &clsid, &CLSID_Picture_Dib ), "got %s\n", wine_dbgstr_guid( &clsid ) );
2461
2462 check_enum_cache( cache, initnew_expect, 2 );
2463
2464 hr = IPersistStorage_InitNew( persist, stg_mf );
2465 ok( hr == CO_E_ALREADYINITIALIZED, "got %08lx\n", hr);
2466
2467 hr = IPersistStorage_HandsOffStorage( persist );
2468 ok( hr == S_OK, "got %08lx\n", hr);
2469
2470 hr = IPersistStorage_GetClassID( persist, &clsid );
2471 ok( hr == S_OK, "got %08lx\n", hr );
2472 ok( IsEqualCLSID( &clsid, &CLSID_Picture_Dib ), "got %s\n", wine_dbgstr_guid( &clsid ) );
2473
2474 hr = IPersistStorage_InitNew( persist, stg_mf );
2475 ok( hr == S_OK, "got %08lx\n", hr);
2476
2477 hr = IPersistStorage_GetClassID( persist, &clsid );
2478 ok( hr == S_OK, "got %08lx\n", hr );
2480
2481 check_enum_cache( cache, initnew2_expect, 3 );
2482
2483 hr = IPersistStorage_HandsOffStorage( persist );
2484 ok( hr == S_OK, "got %08lx\n", hr);
2485
2486 hr = IPersistStorage_InitNew( persist, stg_dib );
2487 ok( hr == S_OK, "got %08lx\n", hr);
2488
2489 hr = IPersistStorage_GetClassID( persist, &clsid );
2490 ok( hr == S_OK, "got %08lx\n", hr );
2491 ok( IsEqualCLSID( &clsid, &CLSID_Picture_Dib ), "got %s\n", wine_dbgstr_guid( &clsid ) );
2492
2493 check_enum_cache( cache, initnew3_expect, 5 );
2494
2495 hr = IPersistStorage_HandsOffStorage( persist );
2496 ok( hr == S_OK, "got %08lx\n", hr);
2497
2498 hr = IPersistStorage_InitNew( persist, stg_wine );
2499 ok( hr == S_OK, "got %08lx\n", hr);
2500
2501 hr = IPersistStorage_GetClassID( persist, &clsid );
2502 ok( hr == S_OK, "got %08lx\n", hr );
2503 ok( IsEqualCLSID( &clsid, &CLSID_WineTestOld ), "got %s\n", wine_dbgstr_guid( &clsid ) );
2504
2505 check_enum_cache( cache, initnew4_expect, 5 );
2506
2507 IStorage_Release( stg_wine );
2508 IStorage_Release( stg_mf );
2509 IStorage_Release( stg_dib );
2510
2511 IPersistStorage_Release( persist );
2512 IOleCache2_Release( cache );
2513}
#define CO_E_ALREADYINITIALIZED
Definition: winerror.h:3917

Referenced by START_TEST().

◆ test_data_cache_save()

static void test_data_cache_save ( void  )
static

Definition at line 3604 of file ole2.c.

3605{
3606 static const WCHAR contentsW[] = { 'C','o','n','t','e','n','t','s',0 };
3607 HRESULT hr;
3608 ILockBytes *ilb;
3609 IStorage *doc;
3610 IStream *stm;
3612 IPersistStorage *stg;
3613 DWORD clipformat[2];
3615
3616 hr = CreateILockBytesOnHGlobal(0, TRUE, &ilb);
3617 ok(hr == S_OK, "unexpected %#lx\n", hr);
3619 ok(hr == S_OK, "unexpected %#lx\n", hr);
3620
3621 ILockBytes_Release(ilb);
3622
3623 hr = IStorage_SetClass(doc, &CLSID_WineTest);
3624 ok(hr == S_OK, "unexpected %#lx\n", hr);
3625
3626 hr = IStorage_CreateStream(doc, contentsW, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
3627 ok(hr == S_OK, "unexpected %#lx\n", hr);
3628 hr = IStream_Write(stm, bmpimage, sizeof(bmpimage), NULL);
3629 ok(hr == S_OK, "unexpected %#lx\n", hr);
3630 IStream_Release(stm);
3631
3632 hr = IStorage_CreateStream(doc, olepres0W, STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
3633 ok(hr == S_OK, "unexpected %#lx\n", hr);
3634
3635 clipformat[0] = -1;
3636 clipformat[1] = CF_METAFILEPICT;
3637 hr = IStream_Write(stm, clipformat, sizeof(clipformat), NULL);
3638 ok(hr == S_OK, "unexpected %#lx\n", hr);
3639
3640 hdr.tdSize = sizeof(hdr.tdSize);
3641 hdr.dvAspect = DVASPECT_CONTENT;
3642 hdr.lindex = -1;
3643 hdr.advf = ADVF_PRIMEFIRST;
3644 hdr.unknown7 = 0;
3645 hdr.dwObjectExtentX = 0;
3646 hdr.dwObjectExtentY = 0;
3647 hdr.dwSize = sizeof(mf_blank_bits);
3648 hr = IStream_Write(stm, &hdr, sizeof(hdr), NULL);
3649 ok(hr == S_OK, "unexpected %#lx\n", hr);
3650 hr = IStream_Write(stm, mf_blank_bits, sizeof(mf_blank_bits), NULL);
3651 ok(hr == S_OK, "unexpected %#lx\n", hr);
3652
3653 IStream_Release(stm);
3654
3656 ok(hr == S_OK, "unexpected %#lx\n", hr);
3657 hr = IOleCache2_QueryInterface(cache, &IID_IPersistStorage, (void **)&stg);
3658 ok(hr == S_OK, "unexpected %#lx\n", hr);
3659 hr = IPersistStorage_Load(stg, doc);
3660 ok(hr == S_OK, "unexpected %#lx\n", hr);
3661
3662 IStorage_Release(doc);
3663
3664 hr = IPersistStorage_IsDirty(stg);
3665 ok(hr == S_FALSE, "unexpected %#lx\n", hr);
3666
3667 ole_stream = NULL;
3669 ok(hr == S_OK, "unexpected %#lx\n", hr);
3670
3671 /* FIXME: remove this stream once Wine is fixed */
3673 ok(hr == S_OK, "unexpected %#lx\n", hr);
3674
3675 SET_EXPECT(Storage_CreateStream_OlePres);
3676 SET_EXPECT(Storage_OpenStream_OlePres);
3677 SET_EXPECT(Storage_OpenStream_Ole);
3681 hr = IPersistStorage_Save(stg, &Storage, FALSE);
3682 ok(hr == S_OK, "unexpected %#lx\n", hr);
3683 CHECK_CALLED(Storage_CreateStream_OlePres);
3684 todo_wine
3685 CHECK_CALLED(Storage_OpenStream_OlePres);
3686 todo_wine
3687 CHECK_CALLED(Storage_OpenStream_Ole);
3688 todo_wine
3690
3691 IStream_Release(olepres_stream);
3692 IStream_Release(contents_stream);
3693
3694 IPersistStorage_Release(stg);
3695 IOleCache2_Release(cache);
3696}
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HRESULT WINAPI StgCreateDocfileOnILockBytes(ILockBytes *plkbyt, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
Definition: storage32.c:8891
HRESULT WINAPI CreateILockBytesOnHGlobal(HGLOBAL global, BOOL delete_on_release, ILockBytes **ret)
Definition: memlockbytes.c:96
#define SET_EXPECT(func)
Definition: ole2.c:41
static const unsigned char bmpimage[]
Definition: ole2.c:3584
static IStorage Storage
Definition: ole2.c:3412
#define CHECK_CALLED(func)
Definition: ole2.c:56
static const unsigned char mf_blank_bits[]
Definition: ole2.c:3597

Referenced by START_TEST().

◆ test_data_cache_save_data()

static void test_data_cache_save_data ( void  )
static

Definition at line 4206 of file ole2.c.

4207{
4208 HRESULT hr;
4209 STGMEDIUM stgmed;
4210 ILockBytes *ilb;
4211 IStorage *doc;
4213 IPersistStorage *persist;
4214 IDataObject *odata;
4215 int enumerated_streams, matched_streams, i;
4216 DWORD dummy;
4217 STGMEDIUM stgmeds[MAX_FMTS];
4218 struct tests_data_cache
4219 {
4220 FORMATETC fmts[MAX_FMTS];
4221 int num_fmts, num_set;
4222 const CLSID *clsid;
4223 struct storage_def stg_def;
4224 };
4225
4226 static struct tests_data_cache *pdata, data[] =
4227 {
4228 {
4229 {
4230 { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL },
4231 { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT },
4232 { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF },
4233 { 0, 0, DVASPECT_DOCPRINT, -1, TYMED_HGLOBAL },
4234 },
4235 4, 3, &CLSID_WineTest,
4236 {
4237 &CLSID_WineTestOld, 4, { { "\2OlePres000", CF_DIB, DVASPECT_CONTENT, 0, NULL, 0 },
4238 { "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, 0, NULL, 0 },
4239 { "\2OlePres002", CF_ENHMETAFILE, DVASPECT_CONTENT, 0, NULL, 0 },
4240 { "\2OlePres003", 0, DVASPECT_DOCPRINT, 0, NULL, 0 } }
4241 }
4242 },
4243 /* without setting data */
4244 {
4245 {
4246 { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL },
4247 { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT },
4248 { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF },
4249 },
4250 3, 0, &CLSID_WineTest,
4251 {
4252 &CLSID_WineTestOld, 3, { { "\2OlePres000", CF_DIB, DVASPECT_CONTENT, 0, NULL, 0 },
4253 { "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, 0, NULL, 0 },
4254 { "\2OlePres002", CF_ENHMETAFILE, DVASPECT_CONTENT, 0, NULL, 0 } }
4255 }
4256 },
4257 /* static picture clsids */
4258 {
4259 {
4260 { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL },
4261 },
4262 1, 1, &CLSID_Picture_Dib,
4263 {
4264 &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } }
4265 }
4266 },
4267 {
4268 {
4269 { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT },
4270 },
4272 {
4273 &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } }
4274 }
4275 },
4276 {
4277 {
4278 { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF },
4279 },
4281 {
4282 &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } }
4283 }
4284 },
4285 /* static picture clsids without setting any data */
4286 {
4287 {
4288 { CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL },
4289 },
4290 1, 0, &CLSID_Picture_Dib,
4291 {
4292 &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } }
4293 }
4294 },
4295 {
4296 {
4297 { CF_METAFILEPICT, 0, DVASPECT_CONTENT, -1, TYMED_MFPICT },
4298 },
4300 {
4301 &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } }
4302 }
4303 },
4304 {
4305 {
4306 { CF_ENHMETAFILE, 0, DVASPECT_CONTENT, -1, TYMED_ENHMF },
4307 },
4309 {
4310 &CLSID_WineTestOld, 1, { { "CONTENTS", -1, 0, 0, NULL, 0 } }
4311 }
4312 },
4313 {
4314 {
4315 { 0 }
4316 }
4317 }
4318 };
4319
4320 /* test _Save after caching directly through _Cache + _SetData */
4321 for (pdata = data; pdata->clsid != NULL; pdata++)
4322 {
4323 hr = CreateDataCache(NULL, pdata->clsid, &IID_IOleCache2, (void **)&cache);
4324 ok(hr == S_OK, "unexpected %#lx\n", hr);
4325
4326 for (i = 0; i < pdata->num_fmts; i++)
4327 {
4328 hr = IOleCache2_Cache(cache, &pdata->fmts[i], 0, &dummy);
4329 ok(SUCCEEDED(hr), "unexpected %#lx\n", hr);
4330 if (i < pdata->num_set)
4331 {
4332 get_stgmedium(pdata->fmts[i].cfFormat, &stgmeds[i]);
4333 get_stgdef(&pdata->stg_def, pdata->fmts[i].cfFormat, &stgmeds[i], i);
4334 hr = IOleCache2_SetData(cache, &pdata->fmts[i], &stgmeds[i], FALSE);
4335 ok(hr == S_OK, "unexpected %#lx\n", hr);
4336 }
4337 }
4338
4339 /* create Storage in memory where we'll save cache */
4340 hr = CreateILockBytesOnHGlobal(0, TRUE, &ilb);
4341 ok(hr == S_OK, "unexpected %#lx\n", hr);
4343 ok(hr == S_OK, "unexpected %#lx\n", hr);
4344 ILockBytes_Release(ilb);
4345 hr = IStorage_SetClass(doc, &CLSID_WineTestOld);
4346 ok(hr == S_OK, "unexpected %#lx\n", hr);
4347
4348 hr = IOleCache2_QueryInterface(cache, &IID_IPersistStorage, (void **)&persist);
4349 ok(hr == S_OK, "unexpected %#lx\n", hr);
4350
4351 /* cache entries are dirty. test saving them to stg */
4352 hr = IPersistStorage_Save(persist, doc, FALSE);
4353 ok(hr == S_OK, "unexpected %#lx\n", hr);
4354
4355 hr = IPersistStorage_IsDirty(persist);
4356 ok(hr == S_OK, "unexpected %#lx\n", hr);
4357
4358 check_storage_contents(doc, &pdata->stg_def, &enumerated_streams, &matched_streams);
4359 ok(enumerated_streams == matched_streams, "enumerated %d != matched %d\n",
4360 enumerated_streams, matched_streams);
4361 ok(enumerated_streams == pdata->stg_def.stream_count, "created %d != def streams %d\n",
4362 enumerated_streams, pdata->stg_def.stream_count);
4363
4364 IPersistStorage_Release(persist);
4365 IOleCache2_Release(cache);
4366
4367 /* now test _Load/_GetData using the storage we used for _Save */
4368 hr = CreateDataCache(NULL, pdata->clsid, &IID_IOleCache2, (void **)&cache);
4369 ok(hr == S_OK, "unexpected %#lx\n", hr);
4370 hr = IOleCache2_QueryInterface(cache, &IID_IPersistStorage, (void **)&persist);
4371 ok(hr == S_OK, "unexpected %#lx\n", hr);
4372
4373 hr = IStorage_SetClass(doc, pdata->clsid);
4374 ok(hr == S_OK, "unexpected %#lx\n", hr);
4375 hr = IPersistStorage_Load(persist, doc);
4376 ok(hr == S_OK, "unexpected %#lx\n", hr);
4377
4378 hr = IOleCache2_QueryInterface(cache, &IID_IDataObject, (void **)&odata);
4379 ok(hr == S_OK, "unexpected %#lx\n", hr);
4380 for (i = 0; i < pdata->num_set; i++)
4381 {
4382 hr = IDataObject_GetData(odata, &pdata->fmts[i], &stgmed);
4383 ok(hr == S_OK, "unexpected %#lx\n", hr);
4384
4385 hr = stgmedium_cmp(&stgmeds[i], &stgmed);
4386 ok(hr == S_OK, "unexpected %#lx\n", hr);
4387 ReleaseStgMedium(&stgmed);
4388 ReleaseStgMedium(&stgmeds[i]);
4389 }
4390
4391 IDataObject_Release(odata);
4392 IPersistStorage_Release(persist);
4393 IStorage_Release(doc);
4394 IOleCache2_Release(cache);
4395 for (i = 0; i < pdata->num_set; i++)
4396 free((void *)pdata->stg_def.stream[i].data);
4397
4398 }
4399}
static struct fmt fmts[]
#define MAX_FMTS
Definition: ole2.c:4205
static void get_stgmedium(CLIPFORMAT cfFormat, STGMEDIUM *stgmedium)
Definition: ole2.c:4187
static HRESULT stgmedium_cmp(const STGMEDIUM *med1, STGMEDIUM *med2)
Definition: ole2.c:3965
static void get_stgdef(struct storage_def *stg_def, CLIPFORMAT cf, STGMEDIUM *stg_med, int stm_idx)
Definition: ole2.c:4118
static PROTOCOLDATA * pdata
Definition: protocol.c:158

Referenced by START_TEST().

◆ test_data_cache_updatecache()

static void test_data_cache_updatecache ( void  )
static

Definition at line 2523 of file ole2.c.

2524{
2525 FORMATETC dib_fmt = {CF_DIB, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
2526 FORMATETC emf_fmt = {CF_ENHMETAFILE, NULL, DVASPECT_CONTENT, -1, TYMED_ENHMF};
2527 FORMATETC wmf_fmt = {CF_METAFILEPICT, NULL, DVASPECT_CONTENT, -1, TYMED_MFPICT};
2528 FORMATETC view_fmt = {0, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
2530 HRESULT hr;
2532 STGMEDIUM medium;
2533 DWORD conn[4];
2534
2535 static STATDATA view_cache[] =
2536 {
2537 {{ 0, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 0 }
2538 };
2539 static STATDATA view_cache_after_dib[] =
2540 {
2541 {{ CF_DIB, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }, 0, NULL, 0 },
2542 {{ CF_BITMAP, 0, DVASPECT_CONTENT, -1, TYMED_GDI }, 0, NULL, 0 }
2543 };
2544
2546 ok( hr == S_OK, "got %08lx\n", hr );
2547 IOleCache2_QueryInterface(cache, &IID_IDataObject, (void **)&data);
2548
2550 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2551 ok( hr == S_OK, "got %08lx\n", hr );
2552
2553 hr = IOleCache2_Cache( cache, &dib_fmt, 0, &conn[0] );
2554 ok( hr == S_OK, "got %08lx\n", hr );
2555
2556 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2557 ok( hr == CACHE_E_NOCACHE_UPDATED, "got %08lx\n", hr );
2558
2559 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2560 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2561
2562 data_object_format = &dib_fmt;
2564 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2565 ok( hr == S_OK, "got %08lx\n", hr );
2566
2567 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2568 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2569 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2570 ok(compare_global(medium.hGlobal, dib_white, sizeof(dib_white)), "Media didn't match.\n");
2571
2572 hr = IOleCache2_Cache(cache, &emf_fmt, 0, &conn[1]);
2573 ok( hr == S_OK, "got %08lx\n", hr );
2574
2576 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2577 ok( hr == S_OK, "got %08lx\n", hr );
2578
2579 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2580 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2581 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2582 ok(compare_global(medium.hGlobal, dib_black, sizeof(dib_black)), "Media didn't match.\n");
2583
2584 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2585 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2586
2587 hr = IDataObject_GetData(data, &wmf_fmt, &medium);
2588 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2589
2590 data_object_format = &emf_fmt;
2591 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2592 ok( hr == S_OK, "got %08lx\n", hr );
2593
2594 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2595 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2596 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2597
2598 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2599 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2600 ok(medium.tymed == TYMED_ENHMF, "Got unexpected tymed %lu.\n", medium.tymed);
2601
2602 hr = IDataObject_GetData(data, &wmf_fmt, &medium);
2603 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2604
2605 data_object_format = &wmf_fmt;
2606 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2607 ok( hr == S_OK, "got %08lx\n", hr );
2608
2609 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2610 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2611 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2612
2613 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2614 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2615 ok(medium.tymed == TYMED_ENHMF, "Got unexpected tymed %lu.\n", medium.tymed);
2616
2617 hr = IDataObject_GetData(data, &wmf_fmt, &medium);
2618 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2619
2620 hr = IOleCache2_Uncache( cache, conn[1] );
2621 ok( hr == S_OK, "got %08lx\n", hr );
2622
2623 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2624 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2625 hr = IDataObject_GetData(data, &wmf_fmt, &medium);
2626 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2627
2628 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2629 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2630
2631 hr = IOleCache2_Cache( cache, &wmf_fmt, 0, &conn[1] );
2632 ok( hr == S_OK, "got %08lx\n", hr );
2633
2634 data_object_format = &emf_fmt;
2635 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2636 ok( hr == CACHE_E_NOCACHE_UPDATED, "got %08lx\n", hr );
2637
2638 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2639 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2640 hr = IDataObject_GetData(data, &wmf_fmt, &medium);
2641 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2642
2643 data_object_format = &wmf_fmt;
2644 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2645 ok( hr == S_OK, "got %08lx\n", hr );
2646
2647 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2648 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2649 hr = IDataObject_GetData(data, &wmf_fmt, &medium);
2650 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2651
2652 hr = IOleCache2_Uncache( cache, conn[1] );
2653 ok( hr == S_OK, "got %08lx\n", hr );
2654 hr = IOleCache2_Uncache( cache, conn[0] );
2655 ok( hr == S_OK, "got %08lx\n", hr );
2656
2657 /* Test view caching. */
2658
2659 hr = IOleCache2_Cache( cache, &view_fmt, 0, &conn[0] );
2660 ok( hr == S_OK, "got %08lx\n", hr );
2661 view_cache[0].dwConnection = conn[0];
2662
2664 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2665 ok( hr == CACHE_E_NOCACHE_UPDATED, "got %08lx\n", hr );
2666
2667 check_enum_cache( cache, view_cache, 1 );
2668
2669 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2670 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2671 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2672 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2673 hr = IDataObject_GetData(data, &view_fmt, &medium);
2674 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2675
2676 data_object_format = &dib_fmt;
2678 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2679 ok( hr == S_OK, "got %08lx\n", hr );
2680
2681 view_cache_after_dib[0].dwConnection = view_cache_after_dib[1].dwConnection = view_cache[0].dwConnection;
2682 check_enum_cache( cache, view_cache_after_dib, 2 );
2683
2684 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2685 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2686 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2687 ok(compare_global(medium.hGlobal, dib_white, sizeof(dib_white)), "Media didn't match.\n");
2688 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2689 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2690 hr = IDataObject_GetData(data, &view_fmt, &medium);
2691 todo_wine ok(hr == DV_E_CLIPFORMAT, "Got hr %#lx.\n", hr);
2692
2693 data_object_format = &emf_fmt;
2694 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ALL, NULL );
2695 ok( hr == CACHE_E_NOCACHE_UPDATED, "got %08lx\n", hr );
2696
2697 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2698 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2699 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2700 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2701
2702 hr = IOleCache2_Uncache( cache, conn[0] );
2703 ok( hr == S_OK, "got %08lx\n", hr );
2704
2705 /* Try some different flags */
2706
2707 hr = IOleCache2_Cache( cache, &dib_fmt, 0, &conn[0] );
2708 ok( hr == S_OK, "got %08lx\n", hr );
2709
2710 hr = IOleCache2_Cache( cache, &emf_fmt, ADVF_NODATA, &conn[1] );
2711 ok( hr == S_OK, "got %08lx\n", hr );
2712
2713 data_object_format = &dib_fmt;
2715 hr = IOleCache2_UpdateCache(cache, &DataObject, UPDFCACHE_IFBLANK, NULL);
2716 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2717
2718 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2719 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2720 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2721 ok(compare_global(medium.hGlobal, dib_white, sizeof(dib_white)), "Media didn't match.\n");
2722 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2723 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2724
2726 hr = IOleCache2_UpdateCache(cache, &DataObject, UPDFCACHE_IFBLANK, NULL);
2727 ok( hr == S_OK, "got %08lx\n", hr );
2728
2729 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2730 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2731 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2732 ok(compare_global(medium.hGlobal, dib_white, sizeof(dib_white)), "Media didn't match.\n");
2733 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2734 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2735
2736 data_object_format = &emf_fmt;
2737 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_IFBLANK , NULL );
2738 ok( hr == S_OK, "got %08lx\n", hr );
2739
2740 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2741 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2742 ok(medium.tymed == TYMED_HGLOBAL, "Got unexpected tymed %lu.\n", medium.tymed);
2743 ok(compare_global(medium.hGlobal, dib_white, sizeof(dib_white)), "Media didn't match.\n");
2744 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2745 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2746
2747 hr = IOleCache2_DiscardCache( cache, DISCARDCACHE_NOSAVE );
2748 ok( hr == S_OK, "got %08lx\n", hr );
2749
2750 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2751 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2752 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2753 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2754
2755 data_object_format = &emf_fmt;
2756 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_IFBLANK | UPDFCACHE_NODATACACHE, NULL );
2757 ok( hr == S_OK, "got %08lx\n", hr );
2758
2759 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2760 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2761 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2762 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2763
2764 hr = IOleCache2_DiscardCache( cache, DISCARDCACHE_NOSAVE );
2765 ok( hr == S_OK, "got %08lx\n", hr );
2766
2767 data_object_format = &dib_fmt;
2768 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ONLYIFBLANK | UPDFCACHE_NORMALCACHE, NULL );
2769 ok( hr == S_OK, "got %08lx\n", hr );
2770
2771 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2772 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2773 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2774 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2775
2776 data_object_format = &emf_fmt;
2777 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ONLYIFBLANK | UPDFCACHE_NORMALCACHE, NULL );
2778 ok( hr == S_OK, "got %08lx\n", hr );
2779
2780 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2781 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2782 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2783 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2784
2785 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_IFBLANK | UPDFCACHE_NORMALCACHE, NULL );
2786 ok( hr == S_OK, "got %08lx\n", hr );
2787
2788 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2789 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2790 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2791 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2792
2793 hr = IOleCache2_DiscardCache( cache, DISCARDCACHE_NOSAVE );
2794 ok( hr == S_OK, "got %08lx\n", hr );
2795
2796 data_object_format = &dib_fmt;
2797 hr = IOleCache2_InitCache( cache, &DataObject );
2798 ok( hr == S_OK, "got %08lx\n", hr );
2799
2800 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2801 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2802 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2803 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2804
2805 data_object_format = &emf_fmt;
2806 hr = IOleCache2_UpdateCache( cache, &DataObject, UPDFCACHE_ONLYIFBLANK | UPDFCACHE_NORMALCACHE, NULL );
2807 ok( hr == S_OK, "got %08lx\n", hr );
2808
2809 hr = IDataObject_GetData(data, &dib_fmt, &medium);
2810 ok(hr == S_OK, "Got hr %#lx.\n", hr);
2811 hr = IDataObject_GetData(data, &emf_fmt, &medium);
2812 ok(hr == OLE_E_BLANK, "Got hr %#lx.\n", hr);
2813
2814 IDataObject_Release(data);
2815 IOleCache2_Release( cache );
2816}
static const BYTE dib_black[]
Definition: ole2.c:200
static BOOL compare_global(HGLOBAL handle, const void *data, SIZE_T size)
Definition: ole2.c:2515
#define DV_E_CLIPFORMAT
Definition: winerror.h:3750

Referenced by START_TEST().

◆ test_default_handler()

static void test_default_handler ( void  )
static

Definition at line 2818 of file ole2.c.

2819{
2820 HRESULT hr;
2822 IRunnableObject *pRunnableObject;
2823 IOleClientSite *pClientSite;
2824 IDataObject *pDataObject;
2825 SIZEL sizel;
2827 CLSID clsid;
2828 LPOLESTR pszUserType;
2830 DWORD dwAdvConn;
2831 IMoniker *pMoniker;
2832 FORMATETC fmtetc;
2833 IOleInPlaceObject *pInPlaceObj;
2834 IEnumOLEVERB *pEnumVerbs;
2835 DWORD dwRegister;
2836 static const WCHAR wszUnknown[] = {'U','n','k','n','o','w','n',0};
2837 static const WCHAR wszHostName[] = {'W','i','n','e',' ','T','e','s','t',' ','P','r','o','g','r','a','m',0};
2838 static const WCHAR wszDelim[] = {'!',0};
2839
2840 static const struct expected_method methods_embeddinghelper[] =
2841 {
2842 { NULL, 0 }
2843 };
2844
2845 hr = CoCreateInstance(&CLSID_WineTest, NULL, CLSCTX_INPROC_HANDLER, &IID_IOleObject, (void **)&pObject);
2846 ok(hr == REGDB_E_CLASSNOTREG, "CoCreateInstance should have failed with REGDB_E_CLASSNOTREG instead of 0x%08lx\n", hr);
2847
2849 ok_ole_success(hr, "OleCreateDefaultHandler");
2850
2851 hr = IOleObject_QueryInterface(pObject, &IID_IOleInPlaceObject, (void **)&pInPlaceObj);
2852 ok(hr == E_NOINTERFACE, "IOleObject_QueryInterface(&IID_IOleInPlaceObject) should return E_NOINTERFACE instead of 0x%08lx\n", hr);
2853
2854 hr = IOleObject_Advise(pObject, &AdviseSink, &dwAdvConn);
2855 ok_ole_success(hr, "IOleObject_Advise");
2856
2857 hr = IOleObject_Close(pObject, OLECLOSE_NOSAVE);
2858 ok_ole_success(hr, "IOleObject_Close");
2859
2860 /* FIXME: test IOleObject_EnumAdvise */
2861
2862 hr = IOleObject_EnumVerbs(pObject, &pEnumVerbs);
2863 ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_EnumVerbs should have returned REGDB_E_CLASSNOTREG instead of 0x%08lx\n", hr);
2864
2865 hr = IOleObject_GetClientSite(pObject, &pClientSite);
2866 ok_ole_success(hr, "IOleObject_GetClientSite");
2867
2868 hr = IOleObject_SetClientSite(pObject, pClientSite);
2869 ok_ole_success(hr, "IOleObject_SetClientSite");
2870
2871 hr = IOleObject_GetClipboardData(pObject, 0, &pDataObject);
2873 "IOleObject_GetClipboardData should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n",
2874 hr);
2875
2876 hr = IOleObject_GetExtent(pObject, DVASPECT_CONTENT, &sizel);
2877 ok(hr == OLE_E_BLANK, "IOleObject_GetExtent should have returned OLE_E_BLANK instead of 0x%08lx\n",
2878 hr);
2879
2880 hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus);
2881 ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_GetMiscStatus should have returned REGDB_E_CLASSNOTREG instead of 0x%08lx\n", hr);
2882
2883 hr = IOleObject_GetUserClassID(pObject, &clsid);
2884 ok_ole_success(hr, "IOleObject_GetUserClassID");
2885 ok(IsEqualCLSID(&clsid, &CLSID_WineTest), "clsid != CLSID_WineTest\n");
2886
2887 hr = IOleObject_GetUserType(pObject, USERCLASSTYPE_FULL, &pszUserType);
2888 todo_wine {
2889 ok_ole_success(hr, "IOleObject_GetUserType");
2890 ok(!lstrcmpW(pszUserType, wszUnknown), "Retrieved user type was wrong\n");
2891 }
2892
2893 hr = IOleObject_InitFromData(pObject, NULL, TRUE, 0);
2894 ok(hr == OLE_E_NOTRUNNING, "IOleObject_InitFromData should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n", hr);
2895
2896 hr = IOleObject_IsUpToDate(pObject);
2897 ok(hr == OLE_E_NOTRUNNING, "IOleObject_IsUpToDate should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n", hr);
2898
2899 palette.palNumEntries = 1;
2900 palette.palVersion = 2;
2901 memset(&palette.palPalEntry[0], 0, sizeof(palette.palPalEntry[0]));
2902 hr = IOleObject_SetColorScheme(pObject, &palette);
2903 ok(hr == OLE_E_NOTRUNNING, "IOleObject_SetColorScheme should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n", hr);
2904
2905 sizel.cx = sizel.cy = 0;
2906 hr = IOleObject_SetExtent(pObject, DVASPECT_CONTENT, &sizel);
2907 ok(hr == OLE_E_NOTRUNNING, "IOleObject_SetExtent should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n", hr);
2908
2909 hr = IOleObject_SetHostNames(pObject, wszHostName, NULL);
2910 ok_ole_success(hr, "IOleObject_SetHostNames");
2911
2912 hr = CreateItemMoniker(wszDelim, wszHostName, &pMoniker);
2913 ok_ole_success(hr, "CreateItemMoniker");
2914 hr = IOleObject_SetMoniker(pObject, OLEWHICHMK_CONTAINER, pMoniker);
2915 ok_ole_success(hr, "IOleObject_SetMoniker");
2916 IMoniker_Release(pMoniker);
2917
2918 hr = IOleObject_GetMoniker(pObject, OLEGETMONIKER_ONLYIFTHERE, OLEWHICHMK_CONTAINER, &pMoniker);
2919 ok(hr == E_FAIL, "IOleObject_GetMoniker should have returned E_FAIL instead of 0x%08lx\n", hr);
2920
2921 hr = IOleObject_Update(pObject);
2922 todo_wine
2923 ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_Update should have returned REGDB_E_CLASSNOTREG instead of 0x%08lx\n", hr);
2924
2925 hr = IOleObject_QueryInterface(pObject, &IID_IDataObject, (void **)&pDataObject);
2926 ok_ole_success(hr, "IOleObject_QueryInterface");
2927
2928 fmtetc.cfFormat = CF_TEXT;
2929 fmtetc.ptd = NULL;
2930 fmtetc.dwAspect = DVASPECT_CONTENT;
2931 fmtetc.lindex = -1;
2932 fmtetc.tymed = TYMED_NULL;
2933 hr = IDataObject_DAdvise(pDataObject, &fmtetc, 0, &AdviseSink, &dwAdvConn);
2934 ok_ole_success(hr, "IDataObject_DAdvise");
2935
2936 fmtetc.cfFormat = CF_ENHMETAFILE;
2937 fmtetc.ptd = NULL;
2938 fmtetc.dwAspect = DVASPECT_CONTENT;
2939 fmtetc.lindex = -1;
2940 fmtetc.tymed = TYMED_ENHMF;
2941 hr = IDataObject_DAdvise(pDataObject, &fmtetc, 0, &AdviseSink, &dwAdvConn);
2942 ok_ole_success(hr, "IDataObject_DAdvise");
2943
2944 fmtetc.cfFormat = CF_ENHMETAFILE;
2945 fmtetc.ptd = NULL;
2946 fmtetc.dwAspect = DVASPECT_CONTENT;
2947 fmtetc.lindex = -1;
2948 fmtetc.tymed = TYMED_ENHMF;
2949 hr = IDataObject_QueryGetData(pDataObject, &fmtetc);
2950 ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n", hr);
2951
2952 fmtetc.cfFormat = CF_TEXT;
2953 fmtetc.ptd = NULL;
2954 fmtetc.dwAspect = DVASPECT_CONTENT;
2955 fmtetc.lindex = -1;
2956 fmtetc.tymed = TYMED_NULL;
2957 hr = IDataObject_QueryGetData(pDataObject, &fmtetc);
2958 ok(hr == OLE_E_NOTRUNNING, "IDataObject_QueryGetData should have returned OLE_E_NOTRUNNING instead of 0x%08lx\n", hr);
2959
2960 hr = IOleObject_QueryInterface(pObject, &IID_IRunnableObject, (void **)&pRunnableObject);
2961 ok_ole_success(hr, "IOleObject_QueryInterface");
2962
2963 hr = IRunnableObject_SetContainedObject(pRunnableObject, TRUE);
2964 ok_ole_success(hr, "IRunnableObject_SetContainedObject");
2965
2966 hr = IRunnableObject_Run(pRunnableObject, NULL);
2967 ok(hr == REGDB_E_CLASSNOTREG, "IOleObject_Run should have returned REGDB_E_CLASSNOTREG instead of 0x%08lx\n", hr);
2968
2969 hr = IOleObject_Close(pObject, OLECLOSE_NOSAVE);
2970 ok_ole_success(hr, "IOleObject_Close");
2971
2972 IRunnableObject_Release(pRunnableObject);
2973 IOleObject_Release(pObject);
2974
2975 /* Test failure propagation from delegate ::QueryInterface */
2977 CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &dwRegister);
2978 ok_ole_success(hr, "CoRegisterClassObject");
2979 if(SUCCEEDED(hr))
2980 {
2981 expected_method_list = methods_embeddinghelper;
2983 &OleObjectCF, &IID_IOleObject, (void**)&pObject);
2984 ok_ole_success(hr, "OleCreateEmbeddingHelper");
2985 if(SUCCEEDED(hr))
2986 {
2987 IUnknown *punk;
2988
2990 hr = IOleObject_QueryInterface(pObject, &IID_WineTest, (void**)&punk);
2991 ok(hr == E_FAIL, "Got 0x%08lx\n", hr);
2992
2994 hr = IOleObject_QueryInterface(pObject, &IID_WineTest, (void**)&punk);
2995 ok(hr == E_NOINTERFACE, "Got 0x%08lx\n", hr);
2996
2998 hr = IOleObject_QueryInterface(pObject, &IID_WineTest, (void**)&punk);
2999 ok(hr == CO_E_OBJNOTCONNECTED, "Got 0x%08lx\n", hr);
3000
3001 g_QIFailsWith = 0x87654321;
3002 hr = IOleObject_QueryInterface(pObject, &IID_WineTest, (void**)&punk);
3003 ok(hr == 0x87654321, "Got 0x%08lx\n", hr);
3004
3005 IOleObject_Release(pObject);
3006 }
3007
3009 todo_wine ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
3010
3011 hr = CoRevokeClassObject(dwRegister);
3012 ok_ole_success(hr, "CoRevokeClassObject");
3013 }
3014}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
HRESULT WINAPI OleCreateEmbeddingHelper(REFCLSID clsid, LPUNKNOWN pUnkOuter, DWORD flags, IClassFactory *pCF, REFIID riid, LPVOID *ppvObj)
HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
FxObject * pObject
HRESULT WINAPI CreateItemMoniker(const WCHAR *delimiter, const WCHAR *name, IMoniker **ret)
Definition: itemmoniker.c:932
static BSTR *static LPOLESTR
Definition: varformat.c:44
static HPALETTE palette
Definition: clipboard.c:1341
#define EMBDHLP_INPROC_SERVER
Definition: ole2.h:48
const GUID IID_IOleInPlaceObject
DWORD dwStatus
Definition: mediaobj.idl:95
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define OLE_E_NOTRUNNING
Definition: winerror.h:3730
#define CO_E_OBJNOTCONNECTED
Definition: winerror.h:3929

Referenced by START_TEST().

◆ test_OleCreate()

static void test_OleCreate ( IStorage pStorage)
static

Definition at line 965 of file ole2.c.

966{
967 HRESULT hr;
969 FORMATETC formatetc;
970 static const struct expected_method methods_olerender_none[] =
971 {
972 { "OleObjectPersistStg_InitNew", 0 },
973 { NULL, 0 }
974 };
975 static const struct expected_method methods_olerender_draw[] =
976 {
977 { "OleObjectPersistStg_InitNew", 0 },
978 { "OleObjectRunnable_Run", 0 },
979 { "OleObjectCache_Cache", 0 },
980 { NULL, 0 }
981 };
982 static const struct expected_method methods_olerender_draw_with_site[] =
983 {
984 { "OleObject_GetMiscStatus", 0 },
985 { "OleObjectPersistStg_InitNew", 0 },
986 { "OleObject_SetClientSite", 0 },
987 { "OleObjectRunnable_Run", 0 },
988 { "OleObjectCache_Cache", 0 },
989 { NULL, 0 }
990 };
991 static const struct expected_method methods_olerender_format[] =
992 {
993 { "OleObject_GetMiscStatus", 0 },
994 { "OleObjectPersistStg_InitNew", 0 },
995 { "OleObject_SetClientSite", 0 },
996 { "OleObjectRunnable_Run", 0 },
997 { "OleObjectCache_Cache", 0 },
998 { NULL, 0 }
999 };
1000 static const struct expected_method methods_olerender_asis[] =
1001 {
1002 { "OleObjectPersistStg_InitNew", 0 },
1003 { NULL, 0 }
1004 };
1005 static const struct expected_method methods_olerender_draw_no_runnable[] =
1006 {
1007 { "OleObjectPersistStg_InitNew", 0 },
1008 { "OleObjectCache_Cache", 0 },
1009 { NULL, 0 },
1010 };
1011 static const struct expected_method methods_olerender_draw_no_cache[] =
1012 {
1013 { "OleObjectPersistStg_InitNew", 0 },
1014 { "OleObjectRunnable_Run", 0 },
1015 { NULL, 0 }
1016 };
1017
1018 g_expected_fetc = &formatetc;
1019 formatetc.cfFormat = 0;
1020 formatetc.ptd = NULL;
1021 formatetc.dwAspect = DVASPECT_CONTENT;
1022 formatetc.lindex = -1;
1023 formatetc.tymed = TYMED_NULL;
1026 expected_method_list = methods_olerender_none;
1027 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_NONE, NULL, NULL, pStorage, (void **)&pObject);
1028 ok_ole_success(hr, "OleCreate");
1029 IOleObject_Release(pObject);
1031 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1032
1033 expected_method_list = methods_olerender_draw;
1034 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject);
1035 ok_ole_success(hr, "OleCreate");
1036 IOleObject_Release(pObject);
1038 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1039
1040 expected_method_list = methods_olerender_draw_with_site;
1041 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, (IOleClientSite*)0xdeadbeef, pStorage, (void **)&pObject);
1042 ok_ole_success(hr, "OleCreate");
1043 IOleObject_Release(pObject);
1045 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1046
1047 /* GetMiscStatus fails */
1048 g_GetMiscStatusFailsWith = 0x8fafefaf;
1049 expected_method_list = methods_olerender_draw_with_site;
1050 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, (IOleClientSite*)0xdeadbeef, pStorage, (void **)&pObject);
1051 ok_ole_success(hr, "OleCreate");
1052 IOleObject_Release(pObject);
1054 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1056
1057 formatetc.cfFormat = CF_TEXT;
1058 formatetc.ptd = NULL;
1059 formatetc.dwAspect = DVASPECT_CONTENT;
1060 formatetc.lindex = -1;
1061 formatetc.tymed = TYMED_HGLOBAL;
1062 expected_method_list = methods_olerender_format;
1063 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_FORMAT, &formatetc, (IOleClientSite *)0xdeadbeef, pStorage, (void **)&pObject);
1064 ok(hr == S_OK ||
1065 broken(hr == E_INVALIDARG), /* win2k */
1066 "OleCreate failed with error 0x%08lx\n", hr);
1067 if (pObject)
1068 {
1069 IOleObject_Release(pObject);
1071 }
1072 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1073
1074 expected_method_list = methods_olerender_asis;
1075 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_ASIS, NULL, NULL, pStorage, (void **)&pObject);
1076 ok_ole_success(hr, "OleCreate");
1077 IOleObject_Release(pObject);
1079 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1080
1081 formatetc.cfFormat = 0;
1082 formatetc.tymed = TYMED_NULL;
1083 runnable = NULL;
1084 expected_method_list = methods_olerender_draw_no_runnable;
1085 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject);
1086 ok_ole_success(hr, "OleCreate");
1087 IOleObject_Release(pObject);
1089
1091 cache = NULL;
1092 expected_method_list = methods_olerender_draw_no_cache;
1093 hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject);
1094 ok_ole_success(hr, "OleCreate");
1095 IOleObject_Release(pObject);
1097 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1099}
HRESULT WINAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt, LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID *ppvObj)
Definition: ole2.c:2596
static IRunnableObject OleObjectRunnable
Definition: ole2.c:883
static IOleCache OleObjectCache
Definition: ole2.c:772

Referenced by START_TEST().

◆ test_OleCreateStaticFromData()

static void test_OleCreateStaticFromData ( void  )
static

Definition at line 4478 of file ole2.c.

4479{
4480 FORMATETC dib_fmt = {CF_DIB, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
4481 FORMATETC emf_fmt = {CF_ENHMETAFILE, NULL, DVASPECT_CONTENT, -1, TYMED_ENHMF};
4482 FORMATETC text_fmt = {CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
4483 HRESULT hr;
4484 IOleObject *ole_obj = NULL;
4486 ILockBytes *ilb;
4487 IPersist *persist;
4488 CLSID clsid;
4489 STATSTG statstg;
4490 int enumerated_streams, matched_streams;
4491 STGMEDIUM stgmed;
4492 static const struct expected_method methods_create_from_dib[] =
4493 {
4494 { "DataObject_EnumFormatEtc", TEST_TODO },
4495 { "DataObject_GetDataHere", 0 },
4496 { NULL }
4497 };
4498 static struct storage_def stg_def_dib =
4499 {
4501 {{ "\1Ole", -1, 0, 0, NULL, 0 },
4502 { "\1CompObj", -1, 0, 0, NULL, 0 },
4503 { "CONTENTS", -1, 0, 0, NULL, 0 }}
4504 };
4505 static struct storage_def stg_def_emf =
4506 {
4508 {{ "\1Ole", -1, 0, 0, NULL, 0 },
4509 { "\1CompObj", -1, 0, 0, NULL, 0 },
4510 { "CONTENTS", -1, 0, 0, NULL, 0 }}
4511 };
4512
4513
4515 ok(hr == S_OK, "CreateILockBytesOnHGlobal failed: 0x%08lx.\n", hr);
4517 0, &storage);
4518 ok(hr == S_OK, "StgCreateDocfileOnILockBytes failed: 0x%08lx.\n", hr);
4519 ILockBytes_Release(ilb);
4520
4521 hr = OleCreateStaticFromData(&DataObject, &IID_IOleObject, OLERENDER_FORMAT,
4522 &dib_fmt, NULL, NULL, (void **)&ole_obj);
4523 ok(hr == E_INVALIDARG, "OleCreateStaticFromData should fail: 0x%08lx.\n", hr);
4524
4525 hr = OleCreateStaticFromData(&DataObject, &IID_IOleObject, OLERENDER_FORMAT,
4526 &dib_fmt, NULL, storage, NULL);
4527 ok(hr == E_INVALIDARG, "OleCreateStaticFromData should fail: 0x%08lx.\n", hr);
4528
4529 /* CF_DIB */
4530 data_object_format = &dib_fmt;
4532 hr = OleCreateStaticFromData(&DataObject, &IID_IOleObject, OLERENDER_FORMAT,
4533 &dib_fmt, NULL, storage, (void **)&ole_obj);
4534 ok(hr == S_OK, "OleCreateStaticFromData failed: 0x%08lx.\n", hr);
4535 hr = IOleObject_QueryInterface(ole_obj, &IID_IPersist, (void **)&persist);
4536 ok(hr == S_OK, "IOleObject_QueryInterface failed: 0x%08lx.\n", hr);
4537 hr = IPersist_GetClassID(persist, &clsid);
4538 ok(hr == S_OK, "IPersist_GetClassID failed: 0x%08lx.\n", hr);
4539 ok(IsEqualCLSID(&clsid, &CLSID_Picture_Dib), "Got wrong clsid: %s, expected: %s.\n",
4541 hr = IStorage_Stat(storage, &statstg, STATFLAG_NONAME);
4542 ok_ole_success(hr, "IStorage_Stat");
4543 ok(IsEqualCLSID(&CLSID_Picture_Dib, &statstg.clsid), "Wrong CLSID in storage.\n");
4544 enumerated_streams = matched_streams = -1;
4545 get_stgmedium(CF_DIB, &stgmed);
4546 get_stgdef(&stg_def_dib, CF_DIB, &stgmed, 2);
4547 check_storage_contents(storage, &stg_def_dib, &enumerated_streams, &matched_streams);
4548 ok(enumerated_streams == matched_streams, "enumerated %d != matched %d\n",
4549 enumerated_streams, matched_streams);
4550 ok(enumerated_streams == stg_def_dib.stream_count, "created %d != def streams %d\n",
4551 enumerated_streams, stg_def_dib.stream_count);
4552 ReleaseStgMedium(&stgmed);
4553 IPersist_Release(persist);
4554 IStorage_Release(storage);
4555 IOleObject_Release(ole_obj);
4556 free((void *)stg_def_dib.stream[2].data);
4557
4558 /* CF_ENHMETAFILE */
4560 ok(hr == S_OK, "CreateILockBytesOnHGlobal failed: 0x%08lx.\n", hr);
4562 0, &storage);
4563 ok(hr == S_OK, "StgCreateDocfileOnILockBytes failed: 0x%08lx.\n", hr);
4564 ILockBytes_Release(ilb);
4565 data_object_format = &emf_fmt;
4566 hr = OleCreateStaticFromData(&DataObject, &IID_IOleObject, OLERENDER_FORMAT,
4567 &emf_fmt, NULL, storage, (void **)&ole_obj);
4568 ok(hr == S_OK, "OleCreateStaticFromData failed: 0x%08lx.\n", hr);
4569 hr = IOleObject_QueryInterface(ole_obj, &IID_IPersist, (void **)&persist);
4570 ok(hr == S_OK, "IOleObject_QueryInterface failed: 0x%08lx.\n", hr);
4571 hr = IPersist_GetClassID(persist, &clsid);
4572 ok(hr == S_OK, "IPersist_GetClassID failed: 0x%08lx.\n", hr);
4573 ok(IsEqualCLSID(&clsid, &CLSID_Picture_EnhMetafile), "Got wrong clsid: %s, expected: %s.\n",
4575 hr = IStorage_Stat(storage, &statstg, STATFLAG_NONAME);
4576 ok_ole_success(hr, "IStorage_Stat");
4577 ok(IsEqualCLSID(&CLSID_Picture_EnhMetafile, &statstg.clsid), "Wrong CLSID in storage.\n");
4578 enumerated_streams = matched_streams = -1;
4579 get_stgmedium(CF_ENHMETAFILE, &stgmed);
4580 get_stgdef(&stg_def_emf, CF_ENHMETAFILE, &stgmed, 2);
4581 check_storage_contents(storage, &stg_def_emf, &enumerated_streams, &matched_streams);
4582 ok(enumerated_streams == matched_streams, "enumerated %d != matched %d\n",
4583 enumerated_streams, matched_streams);
4584 ok(enumerated_streams == stg_def_emf.stream_count, "created %d != def streams %d\n",
4585 enumerated_streams, stg_def_emf.stream_count);
4586 ReleaseStgMedium(&stgmed);
4587 IPersist_Release(persist);
4588 IStorage_Release(storage);
4589 IOleObject_Release(ole_obj);
4590 free((void *)stg_def_emf.stream[2].data);
4591
4592 /* CF_TEXT */
4594 ok(hr == S_OK, "CreateILockBytesOnHGlobal failed: 0x%08lx.\n", hr);
4596 0, &storage);
4597 ok(hr == S_OK, "StgCreateDocfileOnILockBytes failed: 0x%08lx.\n", hr);
4598 ILockBytes_Release(ilb);
4599 data_object_format = &text_fmt;
4600 hr = OleCreateStaticFromData(&DataObject, &IID_IOleObject, OLERENDER_FORMAT,
4601 &text_fmt, NULL, storage, (void **)&ole_obj);
4602 ok(hr == DV_E_CLIPFORMAT, "OleCreateStaticFromData should fail: 0x%08lx.\n", hr);
4603 IStorage_Release(storage);
4604
4606 ok(hr == S_OK, "CreateILockBytesOnHGlobal failed: 0x%08lx.\n", hr);
4608 0, &storage);
4609 ok(hr == S_OK, "StgCreateDocfileOnILockBytes failed: 0x%08lx.\n", hr);
4610 ILockBytes_Release(ilb);
4611 data_object_format = &dib_fmt;
4612 expected_method_list = methods_create_from_dib;
4613 hr = OleCreateFromData(&DataObject, &IID_IOleObject, OLERENDER_FORMAT, &dib_fmt, NULL,
4614 storage, (void **)&ole_obj);
4615 todo_wine ok(hr == DV_E_FORMATETC, "OleCreateFromData should failed: 0x%08lx.\n", hr);
4616 IStorage_Release(storage);
4617}
HRESULT WINAPI OleCreateStaticFromData(IDataObject *data, REFIID iid, DWORD renderopt, FORMATETC *fmt, IOleClientSite *client_site, IStorage *stg, void **obj)
Definition: ole2.c:3038
HRESULT WINAPI OleCreateFromData(IDataObject *data, REFIID iid, DWORD renderopt, FORMATETC *fmt, IOleClientSite *client_site, IStorage *stg, void **obj)
Definition: ole2.c:3015
const GUID IID_IPersist
Definition: proxy.cpp:14

Referenced by START_TEST().

◆ test_OleDoAutoConvert()

static void test_OleDoAutoConvert ( void  )
static

Definition at line 3414 of file ole2.c.

3415{
3416 static const WCHAR clsidW[] = {'C','L','S','I','D','\\',0};
3417 static struct {
3418 DWORD reserved1;
3419 DWORD version;
3420 DWORD reserved2[5];
3421 DWORD ansi_user_type_len;
3422 DWORD ansi_clipboard_format_len;
3424 DWORD unicode_marker;
3425 DWORD unicode_user_type_len;
3426 DWORD unicode_clipboard_format_len;
3427 DWORD reserved4;
3428 } comp_obj_data;
3429 static struct {
3430 DWORD version;
3431 DWORD flags;
3432 DWORD link_update_option;
3433 DWORD reserved1;
3434 DWORD reserved_moniker_stream_size;
3435 DWORD relative_source_moniker_stream_size;
3436 DWORD absolute_source_moniker_stream_size;
3437 DWORD clsid_indicator;
3438 CLSID clsid;
3439 DWORD reserved_display_name;
3441 DWORD local_update_time;
3442 DWORD local_check_update_time;
3443 DWORD remote_update_time;
3444 } ole_data;
3445
3446 LARGE_INTEGER pos = {{0}};
3447 WCHAR buf[39+6];
3448 DWORD i, ret;
3449 HKEY root;
3450 CLSID clsid;
3451 HRESULT hr;
3452
3454 ok(hr == S_OK, "CreateStreamOnHGlobal returned %lx\n", hr);
3455 hr = IStream_Write(comp_obj_stream, (char*)&comp_obj_data, sizeof(comp_obj_data), NULL);
3456 ok(hr == S_OK, "IStream_Write returned %lx\n", hr);
3457
3459 ok(hr == S_OK, "CreateStreamOnHGlobal returned %lx\n", hr);
3460 hr = IStream_Write(ole_stream, (char*)&ole_data, sizeof(ole_data), NULL);
3461 ok(hr == S_OK, "IStream_Write returned %lx\n", hr);
3462
3465 ok(hr == E_INVALIDARG, "OleDoAutoConvert returned %lx\n", hr);
3466 ok(IsEqualIID(&clsid, &IID_NULL), "clsid = %s\n", wine_dbgstr_guid(&clsid));
3467
3468 if(0) /* crashes on Win7 */
3470
3474 ok(hr == REGDB_E_CLASSNOTREG, "OleDoAutoConvert returned %lx\n", hr);
3477
3480
3483 if(ret != ERROR_SUCCESS) {
3484 win_skip("not enough permissions to create CLSID key (%lu)\n", ret);
3485 return;
3486 }
3487
3491 ok(hr == REGDB_E_KEYMISSING, "OleDoAutoConvert returned %lx\n", hr);
3494
3496 ok_ole_success(hr, "OleSetAutoConvert");
3497
3499 ok_ole_success(hr, "OleGetAutoConvert");
3500 ok(IsEqualIID(&clsid, &CLSID_WineTest), "incorrect clsid: %s\n", wine_dbgstr_guid(&clsid));
3501
3504 SET_EXPECT(Storage_OpenStream_CompObj);
3506 SET_EXPECT(Storage_CreateStream_CompObj);
3507 SET_EXPECT(Storage_OpenStream_Ole);
3509 ok(hr == S_OK, "OleDoAutoConvert returned %lx\n", hr);
3511 CHECK_CALLED(Storage_OpenStream_CompObj);
3513 CHECK_CALLED(Storage_CreateStream_CompObj);
3514 CHECK_CALLED(Storage_OpenStream_Ole);
3515 ok(IsEqualIID(&clsid, &CLSID_WineTest), "clsid = %s\n", wine_dbgstr_guid(&clsid));
3516
3517 hr = IStream_Seek(comp_obj_stream, pos, STREAM_SEEK_SET, NULL);
3518 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3519 hr = IStream_Read(comp_obj_stream, &comp_obj_data, sizeof(comp_obj_data), NULL);
3520 ok(hr == S_OK, "IStream_Read returned %lx\n", hr);
3521 ok(comp_obj_data.reserved1 == 0xfffe0001, "reserved1 = %lx\n", comp_obj_data.reserved1);
3522 ok(comp_obj_data.version == 0xa03, "version = %lx\n", comp_obj_data.version);
3523 ok(comp_obj_data.reserved2[0] == -1, "reserved2[0] = %lx\n", comp_obj_data.reserved2[0]);
3524 ok(IsEqualIID(comp_obj_data.reserved2+1, &CLSID_WineTestOld), "reserved2 = %s\n", wine_dbgstr_guid((CLSID*)(comp_obj_data.reserved2+1)));
3525 ok(!comp_obj_data.ansi_user_type_len, "ansi_user_type_len = %ld\n", comp_obj_data.ansi_user_type_len);
3526 ok(!comp_obj_data.ansi_clipboard_format_len, "ansi_clipboard_format_len = %ld\n", comp_obj_data.ansi_clipboard_format_len);
3527 ok(!comp_obj_data.reserved3, "reserved3 = %lx\n", comp_obj_data.reserved3);
3528 ok(comp_obj_data.unicode_marker == 0x71b239f4, "unicode_marker = %lx\n", comp_obj_data.unicode_marker);
3529 ok(!comp_obj_data.unicode_user_type_len, "unicode_user_type_len = %ld\n", comp_obj_data.unicode_user_type_len);
3530 ok(!comp_obj_data.unicode_clipboard_format_len, "unicode_clipboard_format_len = %ld\n", comp_obj_data.unicode_clipboard_format_len);
3531 ok(!comp_obj_data.reserved4, "reserved4 %ld\n", comp_obj_data.reserved4);
3532
3533 hr = IStream_Seek(ole_stream, pos, STREAM_SEEK_SET, NULL);
3534 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3535 hr = IStream_Read(ole_stream, &ole_data, sizeof(ole_data), NULL);
3536 ok(hr == S_OK, "IStream_Read returned %lx\n", hr);
3537 ok(ole_data.version == 0, "version = %lx\n", ole_data.version);
3538 ok(ole_data.flags == 4, "flags = %lx\n", ole_data.flags);
3539 for(i=2; i<sizeof(ole_data)/sizeof(DWORD); i++)
3540 ok(((DWORD*)&ole_data)[i] == 0, "ole_data[%ld] = %lx\n", i, ((DWORD*)&ole_data)[i]);
3541
3542 SET_EXPECT(Storage_OpenStream_Ole);
3544 ok(hr == S_OK, "SetConvertStg returned %lx\n", hr);
3545 CHECK_CALLED(Storage_OpenStream_Ole);
3546
3547 SET_EXPECT(Storage_OpenStream_CompObj);
3549 SET_EXPECT(Storage_CreateStream_CompObj);
3551 ok(hr == S_OK, "WriteFmtUserTypeStg returned %lx\n", hr);
3552 todo_wine CHECK_CALLED(Storage_OpenStream_CompObj);
3554 CHECK_CALLED(Storage_CreateStream_CompObj);
3555 hr = IStream_Seek(comp_obj_stream, pos, STREAM_SEEK_SET, NULL);
3556 ok(hr == S_OK, "IStream_Seek returned %lx\n", hr);
3557 hr = IStream_Read(comp_obj_stream, &comp_obj_data, sizeof(comp_obj_data), NULL);
3558 ok(hr == S_OK, "IStream_Read returned %lx\n", hr);
3559 ok(comp_obj_data.reserved1 == 0xfffe0001, "reserved1 = %lx\n", comp_obj_data.reserved1);
3560 ok(comp_obj_data.version == 0xa03, "version = %lx\n", comp_obj_data.version);
3561 ok(comp_obj_data.reserved2[0] == -1, "reserved2[0] = %lx\n", comp_obj_data.reserved2[0]);
3562 ok(IsEqualIID(comp_obj_data.reserved2+1, &CLSID_WineTestOld), "reserved2 = %s\n", wine_dbgstr_guid((CLSID*)(comp_obj_data.reserved2+1)));
3563 ok(!comp_obj_data.ansi_user_type_len, "ansi_user_type_len = %ld\n", comp_obj_data.ansi_user_type_len);
3564 ok(!comp_obj_data.ansi_clipboard_format_len, "ansi_clipboard_format_len = %ld\n", comp_obj_data.ansi_clipboard_format_len);
3565 ok(!comp_obj_data.reserved3, "reserved3 = %lx\n", comp_obj_data.reserved3);
3566 ok(comp_obj_data.unicode_marker == 0x71b239f4, "unicode_marker = %lx\n", comp_obj_data.unicode_marker);
3567 ok(!comp_obj_data.unicode_user_type_len, "unicode_user_type_len = %ld\n", comp_obj_data.unicode_user_type_len);
3568 ok(!comp_obj_data.unicode_clipboard_format_len, "unicode_clipboard_format_len = %ld\n", comp_obj_data.unicode_clipboard_format_len);
3569 ok(!comp_obj_data.reserved4, "reserved4 %ld\n", comp_obj_data.reserved4);
3570
3571 ret = IStream_Release(comp_obj_stream);
3572 ok(!ret, "comp_obj_stream was not freed\n");
3573 ret = IStream_Release(ole_stream);
3574 ok(!ret, "ole_stream was not freed\n");
3575
3576 ret = RegDeleteKeyA(root, "AutoConvertTo");
3577 ok(ret == ERROR_SUCCESS, "RegDeleteKey error %lu\n", ret);
3578 ret = RegDeleteKeyA(root, "");
3579 ok(ret == ERROR_SUCCESS, "RegDeleteKey error %lu\n", ret);
3581}
#define RegCloseKey(hKey)
Definition: registry.h:49
struct _root root
#define ERROR_SUCCESS
Definition: deptool.c:10
static const WCHAR clsidW[]
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
Definition: reg.c:1224
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
Definition: combase.c:1525
#define lstrcpyW
Definition: compat.h:749
static const WCHAR version[]
Definition: asmname.c:66
HRESULT WINAPI OleSetAutoConvert(REFCLSID clsidOld, REFCLSID clsidNew)
Definition: ole2.c:2717
HRESULT WINAPI OleDoAutoConvert(LPSTORAGE pStg, LPCLSID pClsidNew)
Definition: ole2.c:2743
HRESULT WINAPI OleGetAutoConvert(REFCLSID clsidOld, LPCLSID pClsidNew)
Definition: ole2.c:2691
HRESULT WINAPI WriteFmtUserTypeStg(LPSTORAGE pstg, CLIPFORMAT cf, LPOLESTR lpszUserType)
Definition: storage32.c:9226
HRESULT WINAPI SetConvertStg(IStorage *storage, BOOL convert)
Definition: storage32.c:10377
uint8_t reserved3
Definition: fsck.fat.h:26
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
#define win_skip
Definition: minitest.h:67
#define KEY_READ
Definition: nt_native.h:1026
#define KEY_CREATE_SUB_KEY
Definition: nt_native.h:1021
#define KEY_WRITE
Definition: nt_native.h:1034
#define REGDB_E_KEYMISSING
Definition: winerror.h:3799
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by START_TEST().

◆ test_OleDraw()

static void test_OleDraw ( void  )
static

Definition at line 3154 of file ole2.c.

3155{
3156 HRESULT hr;
3157 RECT rect;
3158
3159 hr = OleDraw((IUnknown*)&viewobject, 0, (HDC)0x1, NULL);
3160 ok(hr == S_OK, "got 0x%08lx\n", hr);
3161
3162 hr = OleDraw(NULL, 0, (HDC)0x1, NULL);
3163 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
3164
3165 hr = OleDraw(NULL, 0, (HDC)0x1, &rect);
3166 ok(hr == E_INVALIDARG, "got 0x%08lx\n", hr);
3167}
HRESULT WINAPI OleDraw(IUnknown *pUnk, DWORD dwAspect, HDC hdcDraw, LPCRECT rect)
Definition: ole2.c:2552
static IViewObject viewobject
Definition: ole2.c:963
& rect
Definition: startmenu.cpp:1413

Referenced by START_TEST().

◆ test_OleLoad()

static void test_OleLoad ( IStorage pStorage)
static

Definition at line 1101 of file ole2.c.

1102{
1103 HRESULT hr;
1105 DWORD fmt;
1106
1107 static const struct expected_method methods_oleload[] =
1108 {
1109 { "OleObject_GetMiscStatus", 0 },
1110 { "OleObjectPersistStg_Load", 0 },
1111 { "OleObject_SetClientSite", 0 },
1112 { "OleObject_GetMiscStatus", 0 },
1113 { NULL, 0 }
1114 };
1115
1116 /* Test once with IOleObject_GetMiscStatus failing */
1117 expected_method_list = methods_oleload;
1119 hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject);
1120 ok(hr == S_OK ||
1121 broken(hr == E_INVALIDARG), /* win98 and win2k */
1122 "OleLoad failed with error 0x%08lx\n", hr);
1123 if(pObject)
1124 {
1125 DWORD dwStatus = 0xdeadbeef;
1126 hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus);
1127 ok(hr == E_FAIL, "Got 0x%08lx\n", hr);
1128 ok(dwStatus == 0x1234, "Got 0x%08lx\n", dwStatus);
1129
1130 IOleObject_Release(pObject);
1132 }
1133 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1135
1136 /* Test again, let IOleObject_GetMiscStatus succeed. */
1137 expected_method_list = methods_oleload;
1138 hr = OleLoad(pStorage, &IID_IOleObject, (IOleClientSite *)0xdeadbeef, (void **)&pObject);
1139 ok(hr == S_OK ||
1140 broken(hr == E_INVALIDARG), /* win98 and win2k */
1141 "OleLoad failed with error 0x%08lx\n", hr);
1142 if (pObject)
1143 {
1144 DWORD dwStatus = 0xdeadbeef;
1145 hr = IOleObject_GetMiscStatus(pObject, DVASPECT_CONTENT, &dwStatus);
1146 ok(hr == S_OK, "Got 0x%08lx\n", hr);
1147 ok(dwStatus == 1, "Got 0x%08lx\n", dwStatus);
1148
1149 IOleObject_Release(pObject);
1151 }
1152 ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
1153
1154 for (fmt = CF_TEXT; fmt < CF_MAX; fmt++)
1155 {
1156 static const WCHAR olrepres[] = { 2,'O','l','e','P','r','e','s','0','0','0',0 };
1157 IStorage *stg;
1158 IStream *stream;
1159 IUnknown *obj;
1160 DWORD data, i, data_size;
1162 HDC hdc;
1163 HGDIOBJ hobj;
1164 RECT rc;
1165 char buf[256];
1166
1167 for (i = 0; i < 7; i++)
1168 {
1170 ok(hr == S_OK, "StgCreateDocfile error %#lx\n", hr);
1171
1172 hr = IStorage_SetClass(stg, &CLSID_WineTest);
1173 ok(hr == S_OK, "SetClass error %#lx\n", hr);
1174
1175 hr = IStorage_CreateStream(stg, olrepres, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, &stream);
1176 ok(hr == S_OK, "CreateStream error %#lx\n", hr);
1177
1178 data = ~0;
1179 hr = IStream_Write(stream, &data, sizeof(data), NULL);
1180 ok(hr == S_OK, "Write error %#lx\n", hr);
1181
1182 data = fmt;
1183 hr = IStream_Write(stream, &data, sizeof(data), NULL);
1184 ok(hr == S_OK, "Write error %#lx\n", hr);
1185
1186 switch (fmt)
1187 {
1188 case CF_BITMAP:
1189 /* FIXME: figure out stream format */
1190 hobj = CreateBitmap(1, 1, 1, 1, NULL);
1191 data_size = GetBitmapBits(hobj, sizeof(buf), buf);
1192 DeleteObject(hobj);
1193 break;
1194
1195 case CF_METAFILEPICT:
1196 case CF_ENHMETAFILE:
1198 hobj = CloseMetaFile(hdc);
1199 data_size = GetMetaFileBitsEx(hobj, sizeof(buf), buf);
1200 DeleteMetaFile(hobj);
1201 break;
1202
1203 default:
1204 data_size = sizeof(buf);
1205 memset(buf, 'A', sizeof(buf));
1206 break;
1207 }
1208
1209 header.tdSize = sizeof(header.tdSize);
1210 header.dvAspect = DVASPECT_CONTENT;
1211 header.lindex = -1;
1212 header.advf = 1 << i;
1213 header.unknown7 = 0;
1214 header.dwObjectExtentX = 1;
1215 header.dwObjectExtentY = 1;
1216 header.dwSize = data_size;
1217 hr = IStream_Write(stream, &header, sizeof(header), NULL);
1218 ok(hr == S_OK, "Write error %#lx\n", hr);
1219
1220 hr = IStream_Write(stream, buf, data_size, NULL);
1221 ok(hr == S_OK, "Write error %#lx\n", hr);
1222
1223 IStream_Release(stream);
1224
1225 hr = OleLoad(stg, &IID_IUnknown, NULL, (void **)&obj);
1226 /* FIXME: figure out stream format */
1227 if (fmt == CF_BITMAP && hr != S_OK)
1228 {
1229 IStorage_Release(stg);
1230 continue;
1231 }
1232 ok(hr == S_OK, "OleLoad error %#lx: cfFormat = %lu, advf = %#lx\n", hr, fmt, header.advf);
1233
1235 SetRect(&rc, 0, 0, 100, 100);
1236 hr = OleDraw(obj, DVASPECT_CONTENT, hdc, &rc);
1237 DeleteDC(hdc);
1238 if (fmt == CF_METAFILEPICT)
1239 ok(hr == S_OK, "OleDraw error %#lx: cfFormat = %lu, advf = %#lx\n", hr, fmt, header.advf);
1240 else if (fmt == CF_ENHMETAFILE)
1241 todo_wine
1242 ok(hr == S_OK, "OleDraw error %#lx: cfFormat = %lu, advf = %#lx\n", hr, fmt, header.advf);
1243 else
1244 ok(hr == OLE_E_BLANK || hr == OLE_E_NOTRUNNING || hr == E_FAIL, "OleDraw should fail: %#lx, cfFormat = %lu, advf = %#lx\n", hr, fmt, header.advf);
1245
1246 IUnknown_Release(obj);
1247 IStorage_Release(stg);
1248 }
1249 }
1250}
HRESULT WINAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite, LPVOID *ppvObj)
Definition: ole2.c:1205
pKey DeleteObject()
FORMATETC fmt
Definition: ole2.c:108
BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE)
HDC WINAPI CreateMetaFileA(_In_opt_ LPCSTR)
LONG WINAPI GetBitmapBits(_In_ HBITMAP hbit, _In_ LONG cb, _Out_writes_bytes_(cb) LPVOID lpvBits)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)

Referenced by START_TEST().

◆ test_OleLockRunning()

static void test_OleLockRunning ( void  )
static

Definition at line 3146 of file ole2.c.

3147{
3148 HRESULT hr;
3149
3151 ok(hr == S_OK, "OleLockRunning failed 0x%08lx\n", hr);
3152}
HRESULT WINAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses)
Definition: ole2.c:1358

Referenced by START_TEST().

◆ test_OleRun()

static void test_OleRun ( void  )
static

Definition at line 3134 of file ole2.c.

3135{
3136 HRESULT hr;
3137
3138 /* doesn't support IRunnableObject */
3139 hr = OleRun(&unknown);
3140 ok(hr == S_OK, "OleRun failed 0x%08lx\n", hr);
3141
3143 ok(hr == 0xdeadc0de, "got 0x%08lx\n", hr);
3144}
HRESULT WINAPI DECLSPEC_HOTPATCH OleRun(LPUNKNOWN pUnknown)
Definition: ole2.c:1186
static IRunnableObject testrunnable
Definition: ole2.c:3132

Referenced by START_TEST().

◆ test_ReleaseStgMedium()

static void test_ReleaseStgMedium ( void  )
static

Definition at line 4619 of file ole2.c.

4620{
4622}

Referenced by START_TEST().

◆ test_runnable()

static void test_runnable ( void  )
static

Definition at line 3016 of file ole2.c.

3017{
3018 static const struct expected_method methods_query_runnable[] =
3019 {
3020 { "OleObjectRunnable_IsRunning", 0 },
3021 { NULL, 0 }
3022 };
3023
3024 static const struct expected_method methods_no_runnable[] =
3025 {
3026 { NULL, 0 }
3027 };
3028
3029 BOOL ret;
3030 IOleObject *object = &OleObject;
3031
3032 /* null argument */
3034 ok(ret == FALSE, "got %d\n", ret);
3035
3036 expected_method_list = methods_query_runnable;
3037 ret = OleIsRunning(object);
3038 ok(ret == TRUE, "Object should be running\n");
3040 todo_wine ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
3041
3043 expected_method_list = methods_query_runnable;
3044 ret = OleIsRunning(object);
3045 ok(ret == FALSE, "Object should not be running\n");
3047 todo_wine ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
3048
3049 g_showRunnable = FALSE; /* QueryInterface(IID_IRunnableObject, ...) will fail */
3050 expected_method_list = methods_no_runnable;
3051 ret = OleIsRunning(object);
3052 ok(ret == TRUE, "Object without IRunnableObject should be running\n");
3054 todo_wine ok(!ole_object_refcount, "Got outstanding refcount %ld.\n", ole_object_refcount);
3055
3056 g_isRunning = TRUE;
3058}
BOOL WINAPI OleIsRunning(LPOLEOBJECT object)
Definition: ole2.c:2803

Referenced by START_TEST().

◆ Unknown_AddRef()

static ULONG WINAPI Unknown_AddRef ( IUnknown iface)
static

Definition at line 1515 of file ole2.c.

1516{
1517 return 2;
1518}

◆ Unknown_QueryInterface()

static HRESULT WINAPI Unknown_QueryInterface ( IUnknown iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 1503 of file ole2.c.

1504{
1505 *ppv = NULL;
1506 if (IsEqualIID(riid, &IID_IUnknown)) *ppv = iface;
1507 if (*ppv)
1508 {
1509 IUnknown_AddRef((IUnknown *)*ppv);
1510 return S_OK;
1511 }
1512 return E_NOINTERFACE;
1513}

◆ Unknown_Release()

static ULONG WINAPI Unknown_Release ( IUnknown iface)
static

Definition at line 1520 of file ole2.c.

1521{
1522 return 1;
1523}

◆ viewobject_AddRef()

static ULONG WINAPI viewobject_AddRef ( IViewObject iface)
static

Definition at line 899 of file ole2.c.

900{
901 return 2;
902}

◆ viewobject_Draw()

static HRESULT WINAPI viewobject_Draw ( IViewObject iface,
DWORD  aspect,
LONG  index,
void paspect,
DVTARGETDEVICE *  ptd,
HDC  hdcTargetDev,
HDC  hdcDraw,
LPCRECTL  bounds,
LPCRECTL  wbounds,
BOOL(STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue)  ,
ULONG_PTR  dwContinue 
)
static

Definition at line 909 of file ole2.c.

913{
914 ok(index == -1, "index=%ld\n", index);
915 return S_OK;
916}
GLuint index
Definition: glext.h:6031

◆ viewobject_Freeze()

static HRESULT WINAPI viewobject_Freeze ( IViewObject iface,
DWORD  draw_aspect,
LONG  index,
void aspect,
DWORD freeze 
)
static

Definition at line 925 of file ole2.c.

927{
928 ok(0, "unexpected call Freeze\n");
929 return E_NOTIMPL;
930}

◆ viewobject_GetAdvise()

static HRESULT WINAPI viewobject_GetAdvise ( IViewObject iface,
DWORD aspects,
DWORD advf,
IAdviseSink **  sink 
)
static

Definition at line 944 of file ole2.c.

946{
947 ok(0, "unexpected call GetAdvise\n");
948 return E_NOTIMPL;
949}

◆ viewobject_GetColorSet()

static HRESULT WINAPI viewobject_GetColorSet ( IViewObject iface,
DWORD  draw_aspect,
LONG  index,
void aspect,
DVTARGETDEVICE *  ptd,
HDC  hicTargetDev,
LOGPALETTE **  colorset 
)
static

Definition at line 918 of file ole2.c.

920{
921 ok(0, "unexpected call GetColorSet\n");
922 return E_NOTIMPL;
923}

◆ viewobject_QueryInterface()

static HRESULT WINAPI viewobject_QueryInterface ( IViewObject iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 887 of file ole2.c.

888{
890 {
891 *obj = iface;
892 return S_OK;
893 }
894
895 *obj = NULL;
896 return E_NOINTERFACE;
897}
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147

◆ viewobject_Release()

static ULONG WINAPI viewobject_Release ( IViewObject iface)
static

Definition at line 904 of file ole2.c.

905{
906 return 1;
907}

◆ viewobject_SetAdvise()

static HRESULT WINAPI viewobject_SetAdvise ( IViewObject iface,
DWORD  aspects,
DWORD  advf,
IAdviseSink sink 
)
static

Definition at line 938 of file ole2.c.

939{
940 ok(0, "unexpected call SetAdvise\n");
941 return E_NOTIMPL;
942}

◆ viewobject_Unfreeze()

static HRESULT WINAPI viewobject_Unfreeze ( IViewObject iface,
DWORD  freeze 
)
static

Definition at line 932 of file ole2.c.

933{
934 ok(0, "unexpected call Unfreeze\n");
935 return E_NOTIMPL;
936}

Variable Documentation

◆ AdviseSink

IAdviseSink AdviseSink = { &AdviseSinkVtbl }
static

Definition at line 1332 of file ole2.c.

Referenced by test_data_cache(), and test_default_handler().

◆ AdviseSinkVtbl

const IAdviseSinkVtbl AdviseSinkVtbl
static
Initial value:
=
{
}
static void WINAPI AdviseSink_OnSave(IAdviseSink *iface)
Definition: ole2.c:1310
static ULONG WINAPI AdviseSink_Release(IAdviseSink *iface)
Definition: ole2.c:1281
static ULONG WINAPI AdviseSink_AddRef(IAdviseSink *iface)
Definition: ole2.c:1276
static HRESULT WINAPI AdviseSink_QueryInterface(IAdviseSink *iface, REFIID riid, void **ppv)
Definition: ole2.c:1264
static void WINAPI AdviseSink_OnViewChange(IAdviseSink *iface, DWORD dwAspect, LONG lindex)
Definition: ole2.c:1295
static void WINAPI AdviseSink_OnRename(IAdviseSink *iface, IMoniker *pmk)
Definition: ole2.c:1303
static void WINAPI AdviseSink_OnClose(IAdviseSink *iface)
Definition: ole2.c:1315
static void WINAPI AdviseSink_OnDataChange(IAdviseSink *iface, FORMATETC *pFormatetc, STGMEDIUM *pStgmed)
Definition: ole2.c:1287

Definition at line 1320 of file ole2.c.

◆ bmpimage

const unsigned char bmpimage[]
static
Initial value:
=
{
0x42,0x4d,0x42,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,
0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
0x00,0x00,0x04,0x00,0x00,0x00,0x12,0x0b,
0x00,0x00,0x12,0x0b,0x00,0x00,0x02,0x00,
0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,
0xff,0x00,0xff,0xff,0xff,0x00,0x00,0x00,
0x00,0x00
}

Definition at line 3584 of file ole2.c.

Referenced by test_data_cache_save().

◆ cache

◆ cf_test_1

UINT cf_test_1
static

Definition at line 119 of file ole2.c.

Referenced by START_TEST(), and test_data_cache().

◆ cf_test_2

UINT cf_test_2
static

Definition at line 119 of file ole2.c.

Referenced by DataObject_DAdvise(), START_TEST(), and test_data_cache().

◆ cf_test_3

UINT cf_test_3
static

Definition at line 119 of file ole2.c.

Referenced by START_TEST(), and test_data_cache().

◆ CLSID_Equation3

const CLSID CLSID_Equation3 = {0x0002CE02, 0x0000, 0x0000, {0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46} }
static

Definition at line 885 of file ole2.c.

Referenced by START_TEST(), and test_OleCreate().

◆ CLSID_WineTest

const CLSID CLSID_WineTest
static
Initial value:
=
{
0x9474ba1a,
0x258b,
0x490b,
{0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0}
}

Definition at line 86 of file ole2.c.

Referenced by START_TEST(), test_data_cache_save(), test_data_cache_save_data(), test_default_handler(), test_OleDoAutoConvert(), and test_OleLoad().

◆ CLSID_WineTestOld

const CLSID CLSID_WineTestOld
static
Initial value:
=
{
0x9474ba1a,
0x258b,
0x490b,
{0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xd0}
}

Definition at line 78 of file ole2.c.

Referenced by Storage_Stat(), test_data_cache_init(), test_data_cache_initnew(), test_data_cache_save_data(), test_data_cache_updatecache(), and test_OleDoAutoConvert().

◆ comp_obj_stream

IStream* comp_obj_stream
static

Definition at line 3171 of file ole2.c.

Referenced by Storage_CreateStream(), Storage_OpenStream(), and test_OleDoAutoConvert().

◆ comp_objW

const WCHAR comp_objW[] = {1,'C','o','m','p','O','b','j',0}
static

Definition at line 3170 of file ole2.c.

Referenced by Storage_CreateStream(), and Storage_OpenStream().

◆ CONTENTS

const WCHAR CONTENTS[] = {'C','O','N','T','E','N','T','S',0}
static

Definition at line 1955 of file ole2.c.

Referenced by create_storage().

◆ contents_stream

IStream* contents_stream
static

Definition at line 3174 of file ole2.c.

Referenced by Storage_CreateStream(), and test_data_cache_save().

◆ data_object_dib

const BYTE* data_object_dib
static

◆ data_object_format

FORMATETC* data_object_format
static

◆ DataObject

IDataObject DataObject = { &DataObjectVtbl }
static

◆ DataObjectVtbl

IDataObjectVtbl DataObjectVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI DataObject_DAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
Definition: ole2.c:1445
static ULONG WINAPI DataObject_AddRef(IDataObject *iface)
Definition: ole2.c:1348
static ULONG WINAPI DataObject_Release(IDataObject *iface)
Definition: ole2.c:1354
static HRESULT WINAPI DataObject_GetData(IDataObject *iface, FORMATETC *format, STGMEDIUM *medium)
Definition: ole2.c:1368
static HRESULT WINAPI DataObject_QueryGetData(IDataObject *iface, FORMATETC *format)
Definition: ole2.c:1410
static HRESULT WINAPI DataObject_GetCanonicalFormatEtc(IDataObject *iface, LPFORMATETC pformatectIn, LPFORMATETC pformatetcOut)
Definition: ole2.c:1417
static HRESULT WINAPI DataObject_DUnadvise(IDataObject *iface, DWORD dwConnection)
Definition: ole2.c:1469
static HRESULT WINAPI DataObject_GetDataHere(IDataObject *iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium)
Definition: ole2.c:1401
static HRESULT WINAPI DataObject_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
Definition: ole2.c:1477
static HRESULT WINAPI DataObject_QueryInterface(IDataObject *iface, REFIID riid, void **ppvObject)
Definition: ole2.c:1334
static HRESULT WINAPI DataObject_EnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
Definition: ole2.c:1436
static HRESULT WINAPI DataObject_SetData(IDataObject *iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
Definition: ole2.c:1426

Definition at line 1485 of file ole2.c.

◆ dib_black

const BYTE dib_black[]
static
Initial value:
=
{
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc8, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}

Definition at line 200 of file ole2.c.

Referenced by test_data_cache_updatecache().

◆ dib_inf

const BYTE dib_inf[]
static
Initial value:
=
{
0x42, 0x4d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x36, 0x00, 0x00, 0x00
}

Definition at line 4105 of file ole2.c.

Referenced by get_stgdef().

◆ dib_white

const BYTE dib_white[]
static
Initial value:
=
{
0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc8, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
}

Definition at line 190 of file ole2.c.

Referenced by create_dib(), DataObject_GetData(), get_stgdef(), test_data_cache_dib_contents_stream(), test_data_cache_updatecache(), and test_OleCreateStaticFromData().

◆ expected_method_list

◆ file_dib

BYTE file_dib[]
static
Initial value:
=
{
0x42, 0x4d, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00,
0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
}

Definition at line 1958 of file ole2.c.

Referenced by create_storage(), and test_data_cache_dib_contents_stream().

◆ g_expected_fetc

FORMATETC* g_expected_fetc = NULL
static

Definition at line 112 of file ole2.c.

Referenced by OleObjectCache_Cache(), and test_OleCreate().

◆ g_GetMiscStatusFailsWith

HRESULT g_GetMiscStatusFailsWith = S_OK
static

Definition at line 116 of file ole2.c.

Referenced by OleObject_GetMiscStatus(), test_OleCreate(), and test_OleLoad().

◆ g_isRunning

BOOL g_isRunning = TRUE
static

Definition at line 115 of file ole2.c.

Referenced by OleObjectRunnable_IsRunning(), and test_runnable().

◆ g_QIFailsWith

HRESULT g_QIFailsWith
static

Definition at line 117 of file ole2.c.

Referenced by OleObject_QueryInterface(), and test_default_handler().

◆ g_showRunnable

BOOL g_showRunnable = TRUE
static

Definition at line 114 of file ole2.c.

Referenced by OleObject_QueryInterface(), and test_runnable().

◆ IID_WineTest

const IID IID_WineTest
static
Initial value:
=
{
0x9474ba1a,
0x258b,
0x490b,
{0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe1}
}

Definition at line 94 of file ole2.c.

Referenced by OleObject_QueryInterface(), test_default_handler(), and test_OleDoAutoConvert().

◆ mf_blank_bits

const unsigned char mf_blank_bits[]
static
Initial value:
=
{
0x01,0x00,0x09,0x00,0x00,0x03,0x0c,0x00,
0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00
}

Definition at line 3597 of file ole2.c.

Referenced by test_data_cache_save().

◆ mf_rec

const BYTE mf_rec[]
static
Initial value:
=
{
0xd7, 0xcd, 0xc6, 0x9a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x16, 0x00, 0x2d, 0x00, 0x40, 0x02,
0x00, 0x00, 0x00, 0x00, 0x6a, 0x55
}

Definition at line 4111 of file ole2.c.

Referenced by get_stgdef().

◆ ole_object_refcount

LONG ole_object_refcount
static

◆ ole_stream

IStream* ole_stream
static

Definition at line 3172 of file ole2.c.

Referenced by Storage_OpenStream(), test_data_cache_save(), and test_OleDoAutoConvert().

◆ OleObject

◆ OleObjectCache

IOleCache OleObjectCache = { &OleObjectCacheVtbl }
static

Definition at line 772 of file ole2.c.

Referenced by test_OleCreate().

◆ OleObjectCacheVtbl

const IOleCacheVtbl OleObjectCacheVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI OleObjectCache_Uncache(IOleCache *iface, DWORD dwConnection)
Definition: ole2.c:716
static HRESULT WINAPI OleObjectCache_SetData(IOleCache *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
Definition: ole2.c:748
static ULONG WINAPI OleObjectCache_Release(IOleCache *iface)
Definition: ole2.c:682
static ULONG WINAPI OleObjectCache_AddRef(IOleCache *iface)
Definition: ole2.c:677
static HRESULT WINAPI OleObjectCache_InitCache(IOleCache *iface, IDataObject *pDataObject)
Definition: ole2.c:737
static HRESULT WINAPI OleObjectCache_Cache(IOleCache *iface, FORMATETC *pformatetc, DWORD advf, DWORD *pdwConnection)
Definition: ole2.c:688
static HRESULT WINAPI OleObjectCache_QueryInterface(IOleCache *iface, REFIID riid, void **ppv)
Definition: ole2.c:672
static HRESULT WINAPI OleObjectCache_EnumCache(IOleCache *iface, IEnumSTATDATA **ppenumSTATDATA)
Definition: ole2.c:726

Definition at line 760 of file ole2.c.

◆ OleObjectCF

IClassFactory OleObjectCF = { &OleObjectCFVtbl }
static

Definition at line 815 of file ole2.c.

Referenced by START_TEST(), and test_default_handler().

◆ OleObjectCFVtbl

const IClassFactoryVtbl OleObjectCFVtbl
static
Initial value:
=
{
}
static ULONG WINAPI OleObjectCF_Release(IClassFactory *iface)
Definition: ole2.c:791
static HRESULT WINAPI OleObjectCF_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID riid, void **ppv)
Definition: ole2.c:796
static HRESULT WINAPI OleObjectCF_LockServer(IClassFactory *iface, BOOL lock)
Definition: ole2.c:801
static ULONG WINAPI OleObjectCF_AddRef(IClassFactory *iface)
Definition: ole2.c:786
static HRESULT WINAPI OleObjectCF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: ole2.c:774

Definition at line 806 of file ole2.c.

◆ OleObjectPersistStg

static IPersistStorage OleObjectPersistStg = { &OleObjectPersistStgVtbl }
static

Definition at line 74 of file ole2.c.

Referenced by OleObject_QueryInterface().

◆ OleObjectPersistStgVtbl

const IPersistStorageVtbl OleObjectPersistStgVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI OleObjectPersistStg_SaveCompleted(IPersistStorage *iface, IStorage *pStgNew)
Definition: ole2.c:638
static HRESULT WINAPI OleObjectPersistStg_InitNew(IPersistStorage *iface, IStorage *pStg)
Definition: ole2.c:607
static HRESULT WINAPI OleObjectPersistStg_Load(IPersistStorage *iface, IStorage *pStg)
Definition: ole2.c:617
static HRESULT WINAPI OleObjectPersistStg_GetClassId(IPersistStorage *iface, CLSID *clsid)
Definition: ole2.c:591
static HRESULT WINAPI OleObjectPersistStg_IsDirty(IPersistStorage *iface)
Definition: ole2.c:598
static ULONG WINAPI OleObjectPersistStg_Release(IPersistStorage *iface)
Definition: ole2.c:586
static HRESULT WINAPI OleObjectPersistStg_HandsOffStorage(IPersistStorage *iface)
Definition: ole2.c:648
static HRESULT WINAPI OleObjectPersistStg_Save(IPersistStorage *iface, IStorage *pStgSave, BOOL fSameAsLoad)
Definition: ole2.c:627
static HRESULT WINAPI OleObjectPersistStg_QueryInterface(IPersistStorage *iface, REFIID riid, void **ppv)
Definition: ole2.c:576
static ULONG WINAPI OleObjectPersistStg_AddRef(IPersistStorage *iface)
Definition: ole2.c:581

Definition at line 656 of file ole2.c.

◆ OleObjectRunnable

IRunnableObject OleObjectRunnable = { &OleObjectRunnableVtbl }
static

Definition at line 883 of file ole2.c.

Referenced by test_OleCreate().

◆ OleObjectRunnableVtbl

const IRunnableObjectVtbl OleObjectRunnableVtbl
static
Initial value:
=
{
}
static BOOL WINAPI OleObjectRunnable_IsRunning(IRunnableObject *iface)
Definition: ole2.c:848
static HRESULT WINAPI OleObjectRunnable_LockRunning(IRunnableObject *iface, BOOL fLock, BOOL fLastUnlockCloses)
Definition: ole2.c:854
static ULONG WINAPI OleObjectRunnable_AddRef(IRunnableObject *iface)
Definition: ole2.c:822
static ULONG WINAPI OleObjectRunnable_Release(IRunnableObject *iface)
Definition: ole2.c:827
static HRESULT WINAPI OleObjectRunnable_SetContainedObject(IRunnableObject *iface, BOOL fContained)
Definition: ole2.c:863
static HRESULT WINAPI OleObjectRunnable_QueryInterface(IRunnableObject *iface, REFIID riid, void **ppv)
Definition: ole2.c:817
static HRESULT WINAPI OleObjectRunnable_Run(IRunnableObject *iface, LPBINDCTX pbc)
Definition: ole2.c:840
static HRESULT WINAPI OleObjectRunnable_GetRunningClass(IRunnableObject *iface, LPCLSID lpClsid)
Definition: ole2.c:832

Definition at line 871 of file ole2.c.

◆ OleObjectVtbl

const IOleObjectVtbl OleObjectVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI OleObject_IsUpToDate(IOleObject *iface)
Definition: ole2.c:431
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink, DWORD *pdwConnection)
Definition: ole2.c:483
static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
Definition: ole2.c:274
static HRESULT WINAPI OleObject_EnumAdvise(IOleObject *iface, IEnumSTATDATA **ppenumAdvise)
Definition: ole2.c:504
static ULONG WINAPI OleObject_AddRef(IOleObject *iface)
Definition: ole2.c:299
static HRESULT WINAPI OleObject_GetMoniker(IOleObject *iface, DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk)
Definition: ole2.c:362
static HRESULT WINAPI OleObject_GetClipboardData(IOleObject *iface, DWORD dwReserved, IDataObject **ppDataObject)
Definition: ole2.c:386
static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
Definition: ole2.c:472
static HRESULT WINAPI OleObject_GetUserType(IOleObject *iface, DWORD dwFormOfType, LPOLESTR *pszUserType)
Definition: ole2.c:450
static HRESULT WINAPI OleObject_GetMiscStatus(IOleObject *iface, DWORD aspect, DWORD *pdwStatus)
Definition: ole2.c:514
static ULONG WINAPI OleObject_Release(IOleObject *iface)
Definition: ole2.c:304
static HRESULT WINAPI OleObject_SetHostNames(IOleObject *iface, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj)
Definition: ole2.c:330
static HRESULT WINAPI OleObject_GetUserClassID(IOleObject *iface, CLSID *pClsid)
Definition: ole2.c:440
static HRESULT WINAPI OleObject_DoVerb(IOleObject *iface, LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
Definition: ole2.c:397
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
Definition: ole2.c:310
static HRESULT WINAPI OleObject_SetMoniker(IOleObject *iface, DWORD dwWhichMoniker, IMoniker *pmk)
Definition: ole2.c:351
static HRESULT WINAPI OleObject_EnumVerbs(IOleObject *iface, IEnumOLEVERB **ppEnumOleVerb)
Definition: ole2.c:412
static HRESULT WINAPI OleObject_Update(IOleObject *iface)
Definition: ole2.c:422
static HRESULT WINAPI OleObject_SetExtent(IOleObject *iface, DWORD dwDrawAspect, SIZEL *psizel)
Definition: ole2.c:461
static HRESULT WINAPI OleObject_SetColorScheme(IOleObject *iface, LOGPALETTE *pLogpal)
Definition: ole2.c:537
static HRESULT WINAPI OleObject_Unadvise(IOleObject *iface, DWORD dwConnection)
Definition: ole2.c:494
static HRESULT WINAPI OleObject_Close(IOleObject *iface, DWORD dwSaveOption)
Definition: ole2.c:341
static HRESULT WINAPI OleObject_GetClientSite(IOleObject *iface, IOleClientSite **ppClientSite)
Definition: ole2.c:320
static HRESULT WINAPI OleObject_InitFromData(IOleObject *iface, IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved)
Definition: ole2.c:374

Definition at line 546 of file ole2.c.

◆ olepres0W

const WCHAR olepres0W[] = {2,'O','l','e','P','r','e','s','0','0','0',0}
static

◆ olepres_stream

IStream* olepres_stream
static

Definition at line 3173 of file ole2.c.

Referenced by Storage_CreateStream(), Storage_OpenStream(), and test_data_cache_save().

◆ oleruntestvtbl

const IRunnableObjectVtbl oleruntestvtbl
static
Initial value:
=
{
}
static ULONG WINAPI OleRun_Release(IRunnableObject *iface)
Definition: ole2.c:3084
static HRESULT WINAPI OleRun_SetContainedObject(IRunnableObject *iface, BOOL contained)
Definition: ole2.c:3114
static BOOL WINAPI OleRun_IsRunning(IRunnableObject *iface)
Definition: ole2.c:3101
static ULONG WINAPI OleRun_AddRef(IRunnableObject *iface)
Definition: ole2.c:3079
static HRESULT WINAPI OleRun_GetRunningClass(IRunnableObject *iface, CLSID *clsid)
Definition: ole2.c:3089
static HRESULT WINAPI OleRun_Run(IRunnableObject *iface, LPBINDCTX ctx)
Definition: ole2.c:3095
static HRESULT WINAPI OleRun_QueryInterface(IRunnableObject *iface, REFIID riid, void **ppv)
Definition: ole2.c:3061
static HRESULT WINAPI OleRun_LockRunning(IRunnableObject *iface, BOOL lock, BOOL last_unlock_closes)
Definition: ole2.c:3107

Definition at line 3120 of file ole2.c.

◆ runnable

◆ stg_def_0

const struct storage_def stg_def_0
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) }}
}

Definition at line 3717 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_0_saved

const struct storage_def stg_def_0_saved
static
Initial value:
=
{
&CLSID_NULL, 0, {{ 0 }}
}

Definition at line 3722 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_1

const struct storage_def stg_def_1
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, NULL, 0 },
{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}

Definition at line 3726 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_1_saved

const struct storage_def stg_def_1_saved
static
Initial value:
=
{
{{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}

Definition at line 3732 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_2

const struct storage_def stg_def_2
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) },
{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}
const CLSID CLSID_ManualResetEvent

Definition at line 3737 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_2_saved

const struct storage_def stg_def_2_saved
static
Initial value:
=
{
{{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}

Definition at line 3743 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_3

const struct storage_def stg_def_3
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) },
{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 },
{ "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, ADVF_PRIMEFIRST, mf_blank_bits, sizeof(mf_blank_bits) },
{ "\2OlePres002", CF_DIB, DVASPECT_CONTENT, ADVF_PRIMEFIRST, bmpimage, sizeof(bmpimage) },
{ "MyStream", -1, 0, 0, "Hello World!", 13 }}
}

Definition at line 3748 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_3_saved

const struct storage_def stg_def_3_saved
static
Initial value:
=
{
{{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 },
{ "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, ADVF_PRIMEFIRST, mf_blank_bits, sizeof(mf_blank_bits) },
{ "\2OlePres002", CF_DIB, DVASPECT_CONTENT, ADVF_PRIMEFIRST, bmpimage, sizeof(bmpimage) }}
}

Definition at line 3757 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_4

const struct storage_def stg_def_4
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) },
{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 },
{ "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, ADVF_PRIMEFIRST, mf_blank_bits, sizeof(mf_blank_bits) },
{ "\2OlePres002", CF_DIB, DVASPECT_CONTENT, ADVF_PRIMEFIRST, bmpimage, sizeof(bmpimage) },
{ "MyStream", -1, 0, 0, "Hello World!", 13 }}
}

Definition at line 3764 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_4_saved

const struct storage_def stg_def_4_saved
static
Initial value:
=
{
{{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}

Definition at line 3773 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_5

const struct storage_def stg_def_5
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) },
{ "\2OlePres002", CF_DIB, DVASPECT_CONTENT, ADVF_PRIMEFIRST, bmpimage, sizeof(bmpimage) },
{ "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, ADVF_PRIMEFIRST, mf_blank_bits, sizeof(mf_blank_bits) },
{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 },
{ "MyStream", -1, 0, 0, "Hello World!", 13 }}
}

Definition at line 3778 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_5_saved

const struct storage_def stg_def_5_saved
static
Initial value:
=
{
{{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}

Definition at line 3787 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_6

const struct storage_def stg_def_6
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) },
{ "\2OlePres001", CF_METAFILEPICT, DVASPECT_CONTENT, ADVF_PRIMEFIRST, mf_blank_bits, sizeof(mf_blank_bits) },
{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 },
{ "\2OlePres002", CF_DIB, DVASPECT_CONTENT, ADVF_PRIMEFIRST, bmpimage, sizeof(bmpimage) },
{ "MyStream", -1, 0, 0, "Hello World!", 13 }}
}

Definition at line 3792 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_6_saved

const struct storage_def stg_def_6_saved
static
Initial value:
=
{
{{ "\2OlePres000", 0, DVASPECT_ICON, ADVF_PRIMEFIRST | ADVF_ONLYONCE, NULL, 0 }}
}

Definition at line 3801 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_7

const struct storage_def stg_def_7
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) }}
}

Definition at line 3806 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_7_saved

const struct storage_def stg_def_7_saved
static
Initial value:
=
{
&CLSID_NULL, 0, {{ 0 }}
}

Definition at line 3811 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_8

const struct storage_def stg_def_8
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, mf_blank_bits, sizeof(mf_blank_bits) }}
}

Definition at line 3815 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_8_saved

const struct storage_def stg_def_8_saved
static
Initial value:
=
{
&CLSID_NULL, 0, {{ 0 }}
}

Definition at line 3820 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_9

const struct storage_def stg_def_9
static
Initial value:
=
{
{{ "Contents", -1, 0, 0, bmpimage, sizeof(bmpimage) }}
}

Definition at line 3824 of file ole2.c.

Referenced by test_data_cache_contents().

◆ stg_def_9_saved

const struct storage_def stg_def_9_saved
static
Initial value:
=
{
&CLSID_NULL, 0, {{ 0 }}
}

Definition at line 3829 of file ole2.c.

Referenced by test_data_cache_contents().

◆ Storage

◆ Storage_DestroyElement_limit

int Storage_DestroyElement_limit
static

Definition at line 72 of file ole2.c.

Referenced by Storage_DestroyElement(), and test_data_cache_save().

◆ Storage_SetClass_CLSID

const CLSID* Storage_SetClass_CLSID
static

Definition at line 71 of file ole2.c.

Referenced by START_TEST(), Storage_SetClass(), and test_data_cache_save().

◆ StorageVtbl

IStorageVtbl StorageVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI Storage_Commit(IStorage *iface, DWORD grfCommitFlags)
Definition: ole2.c:3316
static HRESULT WINAPI Storage_OpenStream(IStorage *iface, LPCOLESTR pwcsName, void *reserved1, DWORD grfMode, DWORD reserved2, IStream **ppstm)
Definition: ole2.c:3238
static HRESULT WINAPI Storage_RenameElement(IStorage *iface, LPCOLESTR pwcsOldName, LPCOLESTR pwcsNewName)
Definition: ole2.c:3352
static HRESULT WINAPI Storage_EnumElements(IStorage *iface, DWORD reserved1, void *reserved2, DWORD reserved3, IEnumSTATSTG **ppenum)
Definition: ole2.c:3328
static HRESULT WINAPI Storage_CreateStorage(IStorage *iface, LPCOLESTR pwcsName, DWORD grfMode, DWORD dwStgFmt, DWORD reserved2, IStorage **ppstg)
Definition: ole2.c:3292
static ULONG WINAPI Storage_Release(IStorage *iface)
Definition: ole2.c:3188
static HRESULT WINAPI Storage_SetElementTimes(IStorage *iface, LPCOLESTR pwcsName, const FILETIME *pctime, const FILETIME *patime, const FILETIME *pmtime)
Definition: ole2.c:3358
static HRESULT WINAPI Storage_CreateStream(IStorage *iface, LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved1, DWORD reserved2, IStream **ppstm)
Definition: ole2.c:3194
static HRESULT WINAPI Storage_SetStateBits(IStorage *iface, DWORD grfStateBits, DWORD grfMask)
Definition: ole2.c:3372
static HRESULT WINAPI Storage_MoveElementTo(IStorage *iface, LPCOLESTR pwcsName, IStorage *pstgDest, LPCOLESTR pwcsNewName, DWORD grfFlags)
Definition: ole2.c:3310
static HRESULT WINAPI Storage_CopyTo(IStorage *iface, DWORD ciidExclude, const IID *rgiidExclude, SNB snbExclude, IStorage *pstgDest)
Definition: ole2.c:3304
static HRESULT WINAPI Storage_OpenStorage(IStorage *iface, LPCOLESTR pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstg)
Definition: ole2.c:3298
static HRESULT WINAPI Storage_Revert(IStorage *iface)
Definition: ole2.c:3322
static ULONG WINAPI Storage_AddRef(IStorage *iface)
Definition: ole2.c:3182
static HRESULT WINAPI Storage_QueryInterface(IStorage *iface, REFIID riid, void **ppvObject)
Definition: ole2.c:3176

Definition at line 3390 of file ole2.c.

◆ testrunnable

IRunnableObject testrunnable = { &oleruntestvtbl }
static

Definition at line 3132 of file ole2.c.

Referenced by test_OleRun().

◆ unknown

IUnknown unknown = { &UnknownVtbl }
static

Definition at line 1532 of file ole2.c.

Referenced by test_data_cache(), test_OleLockRunning(), and test_OleRun().

◆ UnknownVtbl

const IUnknownVtbl UnknownVtbl
static
Initial value:
=
{
}
static ULONG WINAPI Unknown_AddRef(IUnknown *iface)
Definition: ole2.c:1515
static HRESULT WINAPI Unknown_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
Definition: ole2.c:1503
static ULONG WINAPI Unknown_Release(IUnknown *iface)
Definition: ole2.c:1520

Definition at line 1525 of file ole2.c.

◆ viewobject

IViewObject viewobject = { &viewobjectvtbl }
static

Definition at line 963 of file ole2.c.

Referenced by OleDraw(), and test_OleDraw().

◆ viewobjectvtbl

const struct IViewObjectVtbl viewobjectvtbl
static
Initial value:
= {
}
static HRESULT WINAPI viewobject_SetAdvise(IViewObject *iface, DWORD aspects, DWORD advf, IAdviseSink *sink)
Definition: ole2.c:938
static HRESULT WINAPI viewobject_GetColorSet(IViewObject *iface, DWORD draw_aspect, LONG index, void *aspect, DVTARGETDEVICE *ptd, HDC hicTargetDev, LOGPALETTE **colorset)
Definition: ole2.c:918
static HRESULT WINAPI viewobject_Freeze(IViewObject *iface, DWORD draw_aspect, LONG index, void *aspect, DWORD *freeze)
Definition: ole2.c:925
static ULONG WINAPI viewobject_AddRef(IViewObject *iface)
Definition: ole2.c:899
static HRESULT WINAPI viewobject_Unfreeze(IViewObject *iface, DWORD freeze)
Definition: ole2.c:932
static HRESULT WINAPI viewobject_Draw(IViewObject *iface, DWORD aspect, LONG index, void *paspect, DVTARGETDEVICE *ptd, HDC hdcTargetDev, HDC hdcDraw, LPCRECTL bounds, LPCRECTL wbounds, BOOL(STDMETHODCALLTYPE *pfnContinue)(ULONG_PTR dwContinue), ULONG_PTR dwContinue)
Definition: ole2.c:909
static HRESULT WINAPI viewobject_GetAdvise(IViewObject *iface, DWORD *aspects, DWORD *advf, IAdviseSink **sink)
Definition: ole2.c:944
static HRESULT WINAPI viewobject_QueryInterface(IViewObject *iface, REFIID riid, void **obj)
Definition: ole2.c:887
static ULONG WINAPI viewobject_Release(IViewObject *iface)
Definition: ole2.c:904

Definition at line 951 of file ole2.c.