57 const std::type_info& typeInfo,
TAggregator aggregator)
62 NextClass = ClassList.List;
63 ClassList.List =
this;
69 for (
TAutoClass** link = &ClassList.List; *link != 0; link = &(*link)->NextClass)
127 if (cmdId + sym->SymCount >=
id) {
128 obj = sym->Convert(obj);
131 cmdId += sym->SymCount;
136 if (sym->DispId == -1)
157 if (funcCount++ == (
int)index) {
158 retId = (sym->DispId == -1L) ? cmdId : sym->DispId;
187 if (varCount++ == (
int)index) {
188 retId = (sym->DispId == -1L) ? cmdId : sym->DispId;
223 if (sym->TestFlag(symflags) && sym->Name.Compare(name, lang) == 0) {
224 retid = sym->DispId == -1 ? cmdId : sym->DispId;
227 else if (sym->TestFlag(
asClass)) {
234 retid =
id > 0 ?
id + (long)cmdId : id;
237 cmdId += sym->SymCount;
248 for (
int i = 0; (++sym)->TestFlag(
asArgument); ++i)
264 iterator = args.
Symbol->BuildIter(obj, creator, owner, args.
LangId);
267 *retval = (IUnknown*)*iterator;
269 cmdobj = args.
Symbol->Build(obj, attr, args);
310TAutoClass::TExtLink::TExtLink(TClassList* list, HINSTANCE module)
311 : Classes(list),
Module(module), Next(0)
313 for (Prev = &ClassList.Link; *Prev; Prev = &(*Prev)->Next)
317TAutoClass::TExtLink::~TExtLink()
328TAutoClass::TClassList::CountAutoClasses()
331 for (TExtLink* link = Link; link; link = link->Next)
332 count += link->Classes->CountAutoClasses();
339TAutoClass::TAutoClassRef*
340TAutoClass::TClassList::MergeAutoClasses(TAutoClass::TAutoClassRef* array)
342 for (
TAutoClass* cls = List; cls; cls = cls->NextClass, array++)
344 for (TExtLink* link = Link; link; link = link->Next)
345 array = link->Classes->MergeAutoClasses(array);
380#if defined(BI_COMP_BORLANDC) && defined(__clang__)
387namespace __cxxabiv1 {
388class __class_type_info;
389extern "C" void* __dynamic_cast(
const void* sub,
const __class_type_info* src,
390 const __class_type_info* dst, std::ptrdiff_t src2dst);
393#elif defined(BI_COMP_BORLANDC)
398void* __cdecl __DynamicCast(
void*
object,
void* vtable,
399 void* srctyp,
void* dsttyp,
401struct tpid {
int s;
short m;
short n;
int VptrOffs;
int Flags;};
407DynamicCast(
const void* obj,
const std::type_info& src,
const std::type_info& dst)
409#if defined(BI_COMP_BORLANDC) && defined(__clang__)
410 using namespace __cxxabiv1;
411 if (!obj || src == dst)
413 return __dynamic_cast(obj,
reinterpret_cast<const __class_type_info*
>(&src),
414 reinterpret_cast<const __class_type_info*
>(&dst), -1);
415#elif defined(BI_COMP_BORLANDC)
419 else if ((vtblOff = src.tpp->VptrOffs) == -1)
420 return src==dst ? obj : 0;
422 return __DynamicCast(
const_cast<void *
>(obj),
423 *(
void **)((
char*)obj+vtblOff), src.tpp,dst.tpp);
425 return __RTDynamicCast((
void*)obj,0,(
void*)&src,(
void*)&dst,0);
435#if defined(BI_COMP_BORLANDC) && !defined(__clang__)
437 if (!obj || (vtblOff = src.tpp->VptrOffs) == -1)
440 return __DynamicCast(
const_cast<void *
>(obj),
441 *(
void **)((
char*)obj+vtblOff), src.tpp, 0);
TAppDescriptor - OLE application descriptor definitions.
#define PRECONDITION(condition)
bool IsActiveObject(TServedObject *obj)
void UnregisterObject()
Invalidates a helper object registers with RegisterObject earlier.
void InvalidateObject(const void *obj)
short CommandCount
command count including bases, 0 if uncounted
TAutoSymbol * Lookup(TCHAR *name, owl::TLangId lang, short symFlags, long &id)
bool AutoIds
generate ID's automatically if true (default)
TAutoSymbol * ClassSymbol
pointer to class symbol (terminator)
TAggregator Aggregator
aggregator function for C++ COM classes
TAutoSymbol * FindVariable(unsigned index, MEMBERID &retId)
TXAuto::TError Dispatch(ObjectPtr obj, TAutoCreator &creator, TUnknown &owner, int attr, TAutoStack &args, TAutoVal *retval)
TAutoClass(TAutoSymbol *table, TAutoSymbol *classSymbol, const std::type_info &typeInfo, TAggregator aggregator=0)
friend struct TClassList
access to TAutoClassRef
TAutoSymbol * Table
pointer to array of symbol entries
short VariableCount
number of symbols exposed as typelib variables
TAutoSymbol * FindFunction(unsigned index, MEMBERID &retId)
TAutoSymbol * LookupArg(TCHAR *name, owl::TLangId lang, TAutoSymbol *cmd, long &retid)
TAutoCommandBuildDtr GetDestructor() const
TAutoSymbol * FindId(long id, ObjectPtr &objptr)
short FunctionCount
number of symbols exposed as typelib functions
const std::type_info & TypeInfo
for validating type of data pointers
short GetArgCount(TAutoSymbol &sym)
Automation abstract base class for command objects.
virtual TAutoCommand & Invoke()
static LPCTSTR LookupError(long errCode)
bool(*) TCommandHook(TAutoCommand &cmdObj)
virtual void Return(TAutoVal &v)
void SetSymbol(TAutoSymbol *sym)
LPCTSTR(*) TErrorMsgHook(long errCode)
Object responsible for creating automation COM object.
virtual IDispatch * CreateDispatch(TObjectDescriptor objDesc, IUnknown *outer=0)=0
virtual bool Convert(TAutoVal &txtVal, TAutoVal &numVal)=0
automation collection iterator
void SetSymbol(TAutoSymbol *sym)
Automation argument stack abstraction.
TAutoSymbol * Symbol
Symbol of method/prop, args follow.
long ErrorCode
Set if TXAuto::xErrorStatus returned.
LPCTSTR ErrorMsg
Set if TXAuto::xErrorStatus returned.
Automation data element (same data as OLE/BASIC VARIANT).
bool GetObjDesc(TObjectDescriptor &)
TAppDescriptor & GetAppDesc()
OLE object exposed for automated access of internal object.
TServedObjectCreator & Creator
TObjectDescriptor::TDestruct Destruct
what to do with C++ object
void * Object
pointer to C++ object instance, 0 if deleted
const void * RootObject
pointer to object of most derived class
TAutoClass * Class
class of which object is an instance
Standard implementation of a controlling IUnknown for an object, to be inherited with other COM inter...
Automation exception object.
Include for OC, gets common headers when precompiled headers are enabled.
Object Component Framework (COM encapsulation).
const void * MostDerived(const void *obj, const std::type_info &src)
const owl::uint16 atAutoClass
const owl::uint16 atSafeArray
@ asClass
extension to another class symbol table
@ asGetSet
can get or set property(...GET + ...SET)
@ asOleType
method or property exposed for OLE
@ asAnyCommand
any command: method, property get/set, build
@ asArgument
property returning an object
const void * DynamicCast(const void *obj, const std::type_info &src, const std::type_info &dst)
TAutoCommand * AutoQuitBuild(ObjectPtr obj, int attr, TAutoStack &args)
IUnknown &(*) TAggregator(ObjectPtr obj, TUnknown &inner)
const owl::uint16 atByRef
TAppDescriptor * GetAppDescriptor()
void SendObituary(const void *obj, const std::type_info &typeInfo)
owl::uint16 TLangId
Holds a language ID, a predefined number that represents a base language and dialect.
ulong TStaticSync< T >::Count
Definition of TOcControl class - Proxy object representing a control in.
OLE Registration definitions.
static TAutoType ClassInfo
TAutoClass * GetClass() const
bool TestFlag(owl::uint16 mask) const
owl::TLocaleString Name
name of symbol, initially untranslated
owl::uint16 GetFlags() const
TAutoEnum * GetEnum() const
bool IsTerminator() const
const void * Object
< ONLY for use when storing in TAutoVal union
@ Quiet
behavior when an automation helper is freed
int Compare(const tchar *str, TLangId lang)
insensitive compare
const tchar * Translate(TLangId lang)
translate string