50 SetOuter(outer ? outer
51 : &objDesc.Class->Aggregate(
const_cast<void*
>(objDesc.Object), *
this));
60TDispatch::GetTypeInfoCount(
unsigned int * pctinfo)
67TDispatch::GetTypeInfo(
unsigned int, LCID,
ITypeInfo* *)
73TDispatch::GetIDsOfNames(
const IID & riid, OLECHAR * * names,
74 unsigned int cNames, LCID lcid, DISPID * dispIds)
76 if (riid != IID_NULL){
77 WARNX(OcfDll, riid != IID_NULL, 1,
_T(
"TDispatch::GetIDsOfNames() riid != IID_NULL"));
83 for (
int i = 0; i < (int)cNames; i++) {
86 symbol = Class->Lookup(
OleStr(names[0]), LANGIDFROMLCID(lcid),
87 asAnyCommand, dispIds[0]);
92 if (!Class->LookupArg(
OleStr(names[i]), LANGIDFROMLCID(lcid), symbol, dispIds[i]))
103TDispatch::Invoke(DISPID dispidMember,
const IID& , LCID lcid,
104 unsigned short wFlags, DISPPARAMS* dispparams,
105 VARIANT* varResult, EXCEPINFO* exceptInfo,
106 unsigned int* retArgErr)
115 WARNX(OcfDll, !
object, 1,
_T(
"TDispatch::Invoke() Object == 0"));
123 TAutoStack stack(dispidMember, dispparams->rgvarg, lcid, dispparams->cArgs,
124 dispparams->cNamedArgs, dispparams->rgdispidNamedArgs, 0);
128 stack.Symbol = Class->FindId(dispidMember,
object);
142 if (!stack.Symbol->TestFlag(wFlags)) {
143 TRACEX(OcfDll, 1,
_T(
"TDispatch::Invoke() type unsupported"));
152 if (wFlags & (DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF))
162 if (((stack.ArgSymbolCount = Class->GetArgCount(*stack.Symbol)) +
163 ((wFlags & (DISPATCH_PROPERTYPUT|DISPATCH_PROPERTYPUTREF)) != 0) < stack.ArgCount) &&
165 TRACEX(OcfDll, 1,
_T(
"TDispatch::Invoke() BadParamCount"));
173 TDispatchCreator myDispatcher=TDispatchCreator();
174 switch(Class->Dispatch(
object, myDispatcher, *
this, wFlags, stack, (TAutoVal*)varResult)) {
175 case TXAuto::xNoError:
178 case TXAuto::xNotIDispatch:
179 case TXAuto::xForeignIDispatch:
182 case TXAuto::xValidateFailure:
183 *retArgErr = stack.CurrentArg;
186 case TXAuto::xConversionFailure:
187 case TXAuto::xTypeMismatch:
188 *retArgErr = stack.CurrentArg;
191 case TXAuto::xNoArgSymbol:
192 *retArgErr = stack.CurrentArg;
195 case TXAuto::xParameterMissing:
196 case TXAuto::xNoDefaultValue:
199 case TXAuto::xErrorStatus:
201 exceptInfo->wCode = (
unsigned short)stack.ErrorCode;
202 exceptInfo->wReserved = 0;
203 exceptInfo->bstrSource = 0;
205 exceptInfo->bstrHelpFile = 0;
206 exceptInfo->pfnDeferredFillIn = 0;
210 exceptInfo->scode = E_FAIL;
214 case TXAuto::xExecutionFailure:
TAppDescriptor - OLE application descriptor definitions.
#define WARNX(group, condition, level, message)
#define TRACEX(group, level, message)
TUnknown * CreateObject(TObjectDescriptor objDesc, IUnknown *outer=0)
IDispatch * CreateDispatch(TObjectDescriptor objDesc, IUnknown *outer=0)
TAutoClass * Class
class of which object is an instance
TDispatch(const TObjectDescriptor &obj, IUnknown *outer=0)
void * Object
pointer to C++ object instance, 0 if deleted
Standard implementation of a controlling IUnknown for an object, to be inherited with other COM inter...
Include for OC, gets common headers when precompiled headers are enabled.
Object Component Framework (COM encapsulation).
BSTR SysAllocString(const char *str)
DIAG_DECLARE_GROUP(OwlThread)
Definition of TOcControl class - Proxy object representing a control in.
interface _ICLASS ITypeInfo
#define HR_DISP_TYPEMISMATCH
#define HR_DISP_UNKNOWNINTERFACE
#define HR_DISP_BADPARAMCOUNT
#define HR_DISP_UNKNOWNNAME
#define HR_DISP_PARAMNOTOPTIONAL
#define HR_DISP_EXCEPTION
#define HR_DISP_BADVARTYPE
#define HR_DISP_PARAMNOTFOUND
#define HR_DISP_MEMBERNOTFOUND
OLE Registration definitions.
#define DEFINE_QI_OLEBASE(cls, low)
#define DEFINE_COMBASES1(cls, i1)
Undefined default template for dispatchers Template specialization is used to allow the compiler to l...