|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: attest.cpp
//
// Contents: upper layer tests to test the apartment thread model
//
// Classes: CBareFactory
// CATTestIPtrs
//
// Functions:
// ATTest
// CreateEHelperQuery
// LinkObjectQuery
// GetClipboardQuery
// CreateEHTest
// LinkObjectTest
// GetClipboardTest
// OleLinkMethods
// OleObjectMethods
// PersistStorageMethods
// DataObjectMethods
// RunnableObjectMethods
// ViewObject2Methods
// OleCache2Methods
// ExternalConnectionsMethods
// CHECK_FOR_THREAD_ERROR (macro)
//
// History: dd-mmm-yy Author Comment
// 04-Jan-95 t-ScottH author
//
//--------------------------------------------------------------------------
#include "oletest.h"
#include "attest.h"
#include "initguid.h"
DEFINE_GUID(CLSID_SimpSvr, 0xBCF6D4A0, 0xBE8C, 0x1068, 0xB6, 0xD4, 0x00, 0xDD, 0x01, 0x0C, 0x05, 0x09);
DEFINE_GUID(CLSID_StdOleLink, 0x00000300, 0, 0, 0xC0, 0, 0, 0, 0, 0, 0, 0x46);
//+-------------------------------------------------------------------------
//
// Member: CATTestIPtrs::CATTestIPtrs(), public
//
// Synopsis: constructor
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Derivation:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 12-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
CATTestIPtrs::CATTestIPtrs() { _pOleObject = NULL; _pOleCache2 = NULL; _pDataObject = NULL; _pPersistStorage = NULL; _pRunnableObject = NULL; _pViewObject2 = NULL; _pExternalConnection= NULL; _pOleLink = NULL; }
//+-------------------------------------------------------------------------
//
// Member: CATTestIPtrs::Reset(), public
//
// Synopsis: resets all pointers to NULL
//
// Effects: releases all objects
//
// Arguments: none
//
// Requires:
//
// Returns: HRESULT
//
// Signals:
//
// Modifies: releases all objects and NULLs pointer
//
// Derivation:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 12-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
STDMETHODIMP CATTestIPtrs::Reset() { if (_pOleObject != NULL) { _pOleObject->Release(); _pOleObject = NULL; }
if (_pOleCache2 != NULL) { _pOleCache2->Release(); _pOleCache2 = NULL; }
if (_pDataObject != NULL) { _pDataObject->Release(); _pDataObject = NULL; }
if (_pPersistStorage != NULL) { _pPersistStorage->Release(); _pPersistStorage = NULL; }
if (_pRunnableObject != NULL) { _pRunnableObject->Release(); _pRunnableObject = NULL; }
if (_pViewObject2 != NULL) { _pViewObject2->Release(); _pViewObject2 = NULL; }
if (_pExternalConnection != NULL) { _pExternalConnection->Release(); _pExternalConnection = NULL; }
if (_pOleLink != NULL) { _pOleLink->Release(); _pOleLink = NULL; }
return NOERROR; }
//+-------------------------------------------------------------------------
//
// Member: CBareFactory::CBareFactory, public
//
// Synopsis: constructor for the class factory
//
// Effects:
//
// Arguments: none
//
// Returns: void
//
// Modifies: initializes _cRefs
//
// Derivation: IClassFactory
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
CBareFactory::CBareFactory() { _cRefs = 1; }
//+-------------------------------------------------------------------------
//
// Member: CBareFactory::QueryInterface, public
//
// Synopsis: only IUnknown and IClassFactory are supported
//
// Effects:
//
// Arguments: [iid] -- the requested interface
// [ppvObj]-- where to put the interface pointer
//
// Returns: HRESULT
//
// Modifies: ppvObj
//
// Derivation: IClassFactory
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
STDMETHODIMP CBareFactory::QueryInterface (REFIID iid, LPVOID FAR* ppvObj) { if( IsEqualIID(iid, IID_IClassFactory) || IsEqualIID(iid, IID_IUnknown) ) { *ppvObj = this; AddRef(); return NOERROR; } else { *ppvObj = NULL; return E_NOINTERFACE; } }
//+-------------------------------------------------------------------------
//
// Member: CBareFactory::AddRef, public
//
// Synopsis: increments the reference count
//
// Effects:
//
// Arguments: none
//
// Returns: ULONG -- the new reference count
//
// Modifies:
//
// Derivation: IClassFactory
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CBareFactory::AddRef (void) { _cRefs++; return _cRefs; }
//+-------------------------------------------------------------------------
//
// Member: CBareFactory::Release, public
//
// Synopsis: decrements the reference count
//
// Effects: deletes object when reference count is zero
//
// Arguments: none
//
// Returns: ULONG -- the new reference count
//
// Modifies:
//
// Derivation: IClassFactory
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
STDMETHODIMP_(ULONG) CBareFactory::Release (void) { _cRefs--;
if( _cRefs == 0 ) { delete this; return 0; }
return _cRefs; }
//+-------------------------------------------------------------------------
//
// Member: CBareFactory::CreateInstance, public
//
// Synopsis: does nothing
//
// Effects:
//
// Arguments: [pUnkOuter] -- the controlling unknown for aggregation
// [iid] -- the requested interface
// [ppvObj] -- where to put the interface pointer
//
// Returns: HRESULT
//
// Modifies:
//
// Derivation: IClassFactory
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
STDMETHODIMP CBareFactory::CreateInstance ( LPUNKNOWN pUnkOuter, REFIID iid, LPVOID FAR* ppv) { return E_NOTIMPL;; }
//+-------------------------------------------------------------------------
//
// Member: CBareFactory::LockServer, public
//
// Synopsis: does nothing
//
// Effects:
//
// Arguments: [flock] -- specifies the lock count
//
// Returns: HRESULT
//
// Modifies:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
STDMETHODIMP CBareFactory::LockServer ( BOOL fLock ) { return NOERROR; }
//+-------------------------------------------------------------------------
//
// Function: CHECK_FOR_THREAD_ERROR (macro)
//
// Synopsis: make sure that the hresult is RPC_E_WRONG_THREAD
//
// Effects: exits thread if hresult != RPC_E_WRONG
//
// Arguments: [hresult] -- error code
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 09-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
#define CHECK_FOR_THREAD_ERROR(hresult) \
if (hresult != RPC_E_WRONG_THREAD) \ { \ OutputString("Expected RPC_E_WRONG_THREAD but received %x.\r\n", hresult); \ assert(hresult == RPC_E_WRONG_THREAD); \ ExitThread((DWORD)E_UNEXPECTED); \ }
// globals
CATTestIPtrs g_IPtrs;
//+-------------------------------------------------------------------------
//
// Function: ATTest
//
// Synopsis: calls the query functions to get pointers to the
// supported interfaces
//
// Effects:
//
// Arguments: void
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies: globals g_IPtrs._pOleObject
// g_IPtrs._pPersistStorage
// g_IPtrs._pDataObject
// g_IPtrs._pRunnableObject
// g_IPtrs._pViewObject2
// g_IPtrs._pOleCache2
// g_IPtrs._pExternalConnection
// g_IPtrs._pOleLink
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 06-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
void ATTest(void) { HRESULT hresult;
hresult = OleInitialize(NULL); assert(hresult == S_OK);
// the functions CreateEHelperQuery, LinkObjectQuery and
// GetClipboardQuery return either NOERROR or E_UNEXPECTED.
// NOERROR is defined as 0
hresult = CreateEHelperQuery();
g_IPtrs.Reset(); hresult |= LinkObjectQuery();
g_IPtrs.Reset(); hresult |= GetClipboardQuery();
vApp.Reset(); vApp.m_wparam = (hresult == NOERROR) ? TEST_SUCCESS : TEST_FAILURE; vApp.m_lparam = (LPARAM)hresult; vApp.m_message = WM_TESTEND;
HandleTestEnd();
OleUninitialize();
return; }
//+-------------------------------------------------------------------------
//
// Function: GetClipboardQuery
//
// Synopsis: get a pointer to IDataObject interface, create a new thread
// to test proper exit/error codes, wait for the thread to
// complete and return the thread's exit code
//
// Effects: creates new thread
//
// Arguments: none
//
// Requires:
//
// Returns: HRESULT
//
// Signals:
//
// Modifies: g_IPtrs._pDataObject
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
HRESULT GetClipboardQuery(void) { HRESULT hresult; HANDLE hTestInterfaceThread; DWORD dwThreadId = 0; DWORD dwThreadExitCode;
hresult = OleGetClipboard( &g_IPtrs._pDataObject ); assert(hresult == S_OK );
hTestInterfaceThread = CreateThread( NULL, // security attributes
0, // stack size (default)
(LPTHREAD_START_ROUTINE)&GetClipboardTest, // address of thread function
NULL, // arguments of thread function
0, // creation flags
&dwThreadId ); // address of new thread ID
assert(hTestInterfaceThread != NULL); //ensure that we have a valid thread handle
// wait for the thread object so we can examine the error code
WaitForSingleObject(hTestInterfaceThread, INFINITE);
GetExitCodeThread(hTestInterfaceThread, &dwThreadExitCode);
hresult = (HRESULT)dwThreadExitCode;
CloseHandle(hTestInterfaceThread);
return hresult; }
//+-------------------------------------------------------------------------
//
// Function: LinkObjectQuery
//
// Synopsis: get a pointer to available interfaces, create a new thread
// to test proper exit/error codes, wait for the thread to
// complete and return the thread's exit code
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: HRESULT
//
// Signals:
//
// Modifies: g_IPtrs._pOleObject
// g_IPtrs._pPersistStorage
// g_IPtrs._pDataObject
// g_IPtrs._pRunnableObject
// g_IPtrs._pViewObject2
// g_IPtrs._pOleCache2
// g_IPtrs._pOleLink
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
HRESULT LinkObjectQuery(void) { HRESULT hresult; HANDLE hTestInterfaceThread; DWORD dwThreadId = 0; DWORD dwThreadExitCode;
hresult = CoCreateInstance( CLSID_StdOleLink, // class ID of the object class
NULL, // controlling unknown fro aggregation
CLSCTX_INPROC, // context to run executables
IID_IOleObject, // the requested interface
(void **)&g_IPtrs._pOleObject); // where to store pointer to interface
assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IPersistStorage, (void **)&g_IPtrs._pPersistStorage); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IDataObject, (void **)&g_IPtrs._pDataObject); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IRunnableObject, (void **)&g_IPtrs._pRunnableObject); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IViewObject2, (void **)&g_IPtrs._pViewObject2); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IOleCache2, (void **)&g_IPtrs._pOleCache2); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IOleLink, (void **)&g_IPtrs._pOleLink); assert(hresult == S_OK);
hTestInterfaceThread = CreateThread( NULL, // security attributes
0, // stack size (default)
(LPTHREAD_START_ROUTINE)&LinkObjectTest,// address of thread function
NULL, // arguments of thread function
0, // creation flags
&dwThreadId ); // address of new thread ID
assert(hTestInterfaceThread != NULL); //ensure that we have a valid thread handle
// wait for the thread object so we can examine the error code
WaitForSingleObject(hTestInterfaceThread, INFINITE);
GetExitCodeThread(hTestInterfaceThread, &dwThreadExitCode);
hresult = (HRESULT)dwThreadExitCode;
CloseHandle(hTestInterfaceThread);
return hresult; }
//+-------------------------------------------------------------------------
//
// Function: CreateEHelperQuery
//
// Synopsis: get a pointer to available interfaces, create a new thread
// to test proper exit/error codes, wait for the thread to
// complete and return the thread's exit code
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: HRESULT
//
// Signals:
//
// Modifies: g_IPtrs._pOleObject
// g_IPtrs._pPersistStorage
// g_IPtrs._pDataObject
// g_IPtrs._pRunnableObject
// g_IPtrs._pViewObject2
// g_IPtrs._pOleCache2
// g_IPtrs._pExternalConnection
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
//
//--------------------------------------------------------------------------
HRESULT CreateEHelperQuery(void) { HRESULT hresult; HANDLE hTestInterfaceThread; DWORD dwThreadId = 0; DWORD dwThreadExitCode; CBareFactory *pCF = new CBareFactory;
// must use EMBDHLP_DELAYCREATE flag otherwise API will try pCF->CreateInstance
// and verify pointer. CBareFactory::CreateInstance is not implemented!
hresult = OleCreateEmbeddingHelper( CLSID_SimpSvr, // class ID of the server
NULL, // controlling unknown for aggregation
EMBDHLP_INPROC_SERVER | EMBDHLP_DELAYCREATE,// flags
pCF, // pointer to server's class factory
IID_IOleObject, // the requested interface
(void **)&g_IPtrs._pOleObject ); // where to store pointer to interface
assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IPersistStorage, (void **)&g_IPtrs._pPersistStorage); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IDataObject, (void **)&g_IPtrs._pDataObject); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IRunnableObject, (void **)&g_IPtrs._pRunnableObject); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IViewObject2, (void **)&g_IPtrs._pViewObject2); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IOleCache2, (void **)&g_IPtrs._pOleCache2); assert(hresult == S_OK);
hresult = g_IPtrs._pOleObject->QueryInterface(IID_IExternalConnection, (void **)&g_IPtrs._pExternalConnection); assert(hresult == S_OK);
hTestInterfaceThread = CreateThread( NULL, // security attributes
0, // stack size (default)
(LPTHREAD_START_ROUTINE)&CreateEHTest, // address of thread function
NULL, // arguments of thread function
0, // creation flags
&dwThreadId ); // address of new thread ID
assert(hTestInterfaceThread != NULL); //ensure that we have a valid thread handle
// wait for the thread object so we can examine the exit/error code
WaitForSingleObject(hTestInterfaceThread, INFINITE);
GetExitCodeThread(hTestInterfaceThread, &dwThreadExitCode);
hresult = (HRESULT)dwThreadExitCode;
CloseHandle(hTestInterfaceThread);
pCF->Release();
return hresult; }
//+-------------------------------------------------------------------------
//
// Function: GetClipBoardTest
//
// Synopsis: calls interface method functions and exits thread
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: all the interface methods are being called from a thread
// which is not the owner. The methods should return
// RPC_E_WRONG_THREAD error. If an interface method does not
// return such error message, it is asserted and the
// thread is exited with an E_UNEXPECTED exit code.
//
//--------------------------------------------------------------------------
void GetClipboardTest(void) { DataObjectMethods();
ExitThread((DWORD)NOERROR); }
//+-------------------------------------------------------------------------
//
// Function: LinkObjectTest
//
// Synopsis: calls interface method functions and exits thread
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: all the interface methods are being called from a thread
// which is not the owner. The methods should return
// RPC_E_WRONG_THREAD error. If an interface method does not
// return such error message, it is asserted and the
// thread is exited with an E_UNEXPECTED exit code.
//
//--------------------------------------------------------------------------
void LinkObjectTest(void) { OleObjectMethods();
PersistStorageMethods();
DataObjectMethods();
RunnableObjectMethods();
OleCache2Methods();
ViewObject2Methods();
OleLinkMethods();
ExitThread((DWORD)NOERROR); }
//+-------------------------------------------------------------------------
//
// Function: CreateEHTest
//
// Synopsis: calls interface method functions and exits thread
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: all the interface methods are being called from a thread
// which is not the owner. The methods should return
// RPC_E_WRONG_THREAD error. If an interface method does not
// return such error message, it is asserted and the
// thread is exited with an E_UNEXPECTED exit code.
//
//--------------------------------------------------------------------------
void CreateEHTest(void) { ExternalConnectionsMethods();
OleObjectMethods();
PersistStorageMethods();
DataObjectMethods();
RunnableObjectMethods();
ViewObject2Methods();
OleCache2Methods();
ExitThread((DWORD)NOERROR); }
//+-------------------------------------------------------------------------
//
// Function: OleLinkMethods
//
// Synopsis: Calls all public IOleLink interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void OleLinkMethods(void) { HRESULT hresult;
hresult = g_IPtrs._pOleLink->SetUpdateOptions(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->GetUpdateOptions(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->SetSourceMoniker(NULL, CLSID_NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->GetSourceMoniker(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->SetSourceDisplayName(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->GetSourceDisplayName(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->BindToSource(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->BindIfRunning(); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->GetBoundSource(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->UnbindSource(); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleLink->Update(NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: ExternalConnectionsMethods
//
// Synopsis: Calls all public IExternalConnection interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void ExternalConnectionsMethods(void) { HRESULT hresult;
hresult = (HRESULT)g_IPtrs._pExternalConnection->AddConnection(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = (HRESULT)g_IPtrs._pExternalConnection->ReleaseConnection(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: OleObjectMethods
//
// Synopsis: Calls all public IOleObject interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void OleObjectMethods(void) { HRESULT hresult;
hresult = g_IPtrs._pOleObject->SetClientSite(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetClientSite(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->SetHostNames(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->Close(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->SetMoniker(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetMoniker(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->InitFromData(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetClipboardData(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->DoVerb(NULL, NULL, NULL, NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->EnumVerbs(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->Update(); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->IsUpToDate(); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetUserClassID(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetUserType(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->SetExtent(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetExtent(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->Advise(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->Unadvise(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->EnumAdvise(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->GetMiscStatus(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleObject->SetColorScheme(NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: PersistStorageMethods
//
// Synopsis: Calls all public IPersistStorage interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void PersistStorageMethods(void) { HRESULT hresult;
hresult = g_IPtrs._pPersistStorage->GetClassID(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pPersistStorage->IsDirty(); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pPersistStorage->InitNew(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pPersistStorage->Load(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pPersistStorage->Save(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pPersistStorage->SaveCompleted(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pPersistStorage->HandsOffStorage(); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: DataObjectMethods
//
// Synopsis: Calls all public IDataObject interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void DataObjectMethods(void) { HRESULT hresult;
hresult = g_IPtrs._pDataObject->GetData(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->GetDataHere(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->QueryGetData(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->GetCanonicalFormatEtc(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->SetData(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->EnumFormatEtc(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->DAdvise(NULL, NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->DUnadvise(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pDataObject->EnumDAdvise(NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: RunnableObjectMethods
//
// Synopsis: Calls all public IRunnableObject interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void RunnableObjectMethods(void) { HRESULT hresult;
hresult = g_IPtrs._pRunnableObject->GetRunningClass(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pRunnableObject->Run(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pRunnableObject->IsRunning(); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pRunnableObject->LockRunning(NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pRunnableObject->SetContainedObject(NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: ViewObject2Methods
//
// Synopsis: Calls all public IViewObject2 interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void ViewObject2Methods(void) { HRESULT hresult;
hresult = g_IPtrs._pViewObject2->Draw(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pViewObject2->GetColorSet(NULL, NULL, NULL, NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pViewObject2->Freeze(NULL, NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pViewObject2->Unfreeze(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pViewObject2->SetAdvise(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pViewObject2->GetAdvise(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pViewObject2->GetExtent(NULL, NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
//+-------------------------------------------------------------------------
//
// Function: OleCache2Methods
//
// Synopsis: Calls all public IOleCache2 interface methods with NULL
// parameters.
//
// Effects:
//
// Arguments: none
//
// Requires:
//
// Returns: void
//
// Signals:
//
// Modifies:
//
// Algorithm:
//
// History: dd-mmm-yy Author Comment
// 11-Jan-95 t-ScottH author
//
// Notes:
// Notes: The interface methods are called on the wrong thread, thus
// an RPC_E_WRONG_THREAD error should be returned from each
// method. If not, we assert and then exit the thread.
//
//--------------------------------------------------------------------------
void OleCache2Methods(void) { HRESULT hresult;
hresult = g_IPtrs._pOleCache2->Cache(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleCache2->Uncache(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleCache2->EnumCache(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleCache2->InitCache(NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleCache2->SetData(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleCache2->UpdateCache(NULL, NULL, NULL); CHECK_FOR_THREAD_ERROR(hresult);
hresult = g_IPtrs._pOleCache2->DiscardCache(NULL); CHECK_FOR_THREAD_ERROR(hresult);
return; }
|