office-gobmx/winaccessibility/source/UAccCOM/acccommon.h
Michael Stahl 3b86569fcb winaccessibility: replace CoCreateInstance with direct instantiation
This is an alternative (to 732ec36edf)
solution to the "CoCreateInstance does not work" problem:
replace all CoCreateInstance calls with equivalent calls to create
the components directly.

Since the only reason why this COM stuff needs to be registered
at all is that AccObject uses CoCreateInstance() to create its
COM objects, another possible solution appears to be to simply link
the libraries and instantiate the COM objects directly, without COM.

The only difference appears to be that CoCreateInstance would
automatically add proxy objects in case the COM objects reside in a
single-threaded appartment; not sure if that is relevant here.

Change-Id: I8ffb8af501f6084f3145fa4d4f53366a070e1691
Reviewed-on: https://gerrit.libreoffice.org/6792
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
2013-11-25 03:21:30 -06:00

96 lines
3.1 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef __ACCCOMMON_H_
#define __ACCCOMMON_H_
//for MAccessible.cxx
struct ltComp
{
bool operator()(REFGUID rguid1, REFGUID rguid2) const
{
if(((PLONG) &rguid1)[0] < ((PLONG) &rguid2)[0])
return TRUE;
else if(((PLONG) &rguid1)[0] > ((PLONG) &rguid2)[0])
return FALSE;
if(((PLONG) &rguid1)[1] < ((PLONG) &rguid2)[1])
return TRUE;
else if(((PLONG) &rguid1)[1] > ((PLONG) &rguid2)[1])
return FALSE;
if(((PLONG) &rguid1)[2] < ((PLONG) &rguid2)[2])
return TRUE;
else if(((PLONG) &rguid1)[2] > ((PLONG) &rguid2)[2])
return FALSE;
if(((PLONG) &rguid1)[3] < ((PLONG) &rguid2)[3])
return TRUE;
else if(((PLONG) &rguid1)[3] > ((PLONG) &rguid2)[3])
return FALSE;
return FALSE;
}
};
#define BEGIN_AGGOBJECT_MAP(x) \
static _UNO_AGGMAP_ENTRY* WINAPI _GetAggEntries() { \
static _UNO_AGGMAP_ENTRY _aggentries[] = {
#define END_AGGOBJECT_MAP() {NULL, NULL,NULL}}; \
return _aggentries;}
#define AGGOBJECT_ENTRY(iid, clsid, ifindex) {&iid, \
CComAggregateCreator< CComObject<CMAccessible>, &clsid >::CreateInstance,\
XI_##ifindex},
enum DM_NIR {
DM_FIRSTCHILD = 0x00,
DM_LASTCHILD = 0x01,
DM_NEXTCHILD = 0x02,
DM_PREVCHILD = 0x03
};
inline BOOL ImplIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
{
return (
((PLONG) &rguid1)[0] == ((PLONG) &rguid2)[0] &&
((PLONG) &rguid1)[1] == ((PLONG) &rguid2)[1] &&
((PLONG) &rguid1)[2] == ((PLONG) &rguid2)[2] &&
((PLONG) &rguid1)[3] == ((PLONG) &rguid2)[3]);
}
#define InlineIsEqualGUID ImplIsEqualGUID
//End
//for AccAction.cxx
#define CODEENTRY(key) \
{KEYCODE_##key, L#key}
#define countof(x) (sizeof(x)/sizeof(x[0]))
#define SELECT L"Select"
#define PRESS L"Press"
#define UNCHECK L"UnCheck"
#define CHECK L"Check"
//End
static DWORD GetMSAAStateFromUNO(short xState);
template<typename T, typename Ifc> HRESULT
createInstance(REFIID iid, Ifc ** ppIfc)
{
return CComCreator< CComObject<T> >::CreateInstance(0, iid, (void**)ppIfc);
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */