// An InterfaceOleWrapper object can wrap either a UNO struct or a UNO // interface as a COM IDispatchEx and IUnoObjectWrapper.
class InterfaceOleWrapper : public WeakImplHelper<XBridgeSupplier2, XInitialization>, public IDispatchEx, public IProvideClassInfo, public IConnectionPointContainer, public UnoConversionUtilities<InterfaceOleWrapper>, public IUnoObjectWrapper
{ public:
InterfaceOleWrapper(Reference<XMultiServiceFactory> const & xFactory, sal_uInt8 unoWrapperClass, sal_uInt8 comWrapperClass);
~InterfaceOleWrapper() override;
Reference<XInvocation> m_xInvocation;
Reference<XExactName> m_xExactName;
Reference<XInterface> m_xOrigin;
NameToIdMap m_nameToDispIdMap;
std::vector<MemberInfo> m_MemberInfos; // This member is used to determine the default value // denoted by DISPID_VALUE (0). For proper results in JavaScript // we have to return the default value when we write an object // as out parameter. That is, we get a JScript Array as parameter // and put a wrapped object on index null. The array object tries // to detect the default value. The wrapped object must then return // its own IDispatch* otherwise we cannot access it within the script. // see InterfaceOleWrapper::Invoke
VARTYPE m_defaultValueType;
// The name of the implementation. Can be empty if unknown.
OUString m_sImplementationName;
};
// UnoConversionUtility // If UNO interfaces are converted in methods of this class then // they are always wrapped with instances of this class virtual Reference< XInterface > createUnoWrapperInstance() override;
protected:
static HRESULT methodInvoke( DISPID dispidMember, DISPPARAMS * pdispparams, VARIANT * pvarResult,
EXCEPINFO * pexcepinfo, unsignedint * puArgErr, Sequence<Any> const & params); // In GetIDsOfNames are blindly passed out, that is without verifying // the name. If two names are passed in during different calls to // GetIDsOfNames and the names differ only in their cases then different // id's are passed out ( e.g. "doSomethingMethod" or "dosomethingmethod"). // In Invoke the DISPID is remapped to the name passed to GetIDsOfNames // and the name is used as parameter for XInvocation::invoke. If invoke // fails because of a wrong name, then m_xExactName ( XExactName) is used // to verify the name. The correct name is then inserted to m_MemberInfos // ( vector<MemberInfo> ). During the next call to Invoke the right name // is used. .
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.