home *** CD-ROM | disk | FTP | other *** search
- //
- //----------------------------------------------------------------------------
- // ObjectComponents
- // (C) Copyright 1994 by Borland International, All Rights Reserved
- //
- // TAppDescriptor - OLE application descriptor definitions
- //----------------------------------------------------------------------------
- #if !defined(OCF_APPDESC_H)
- #define OCF_APPDESC_H
-
- #if !defined(OCF_AUTODEFS_H)
- # include <ocf/autodefs.h>
- #endif
-
- //____________________________________________________________________________
- //
- // TAppDescriptor - application registration and browsing facilities
- //____________________________________________________________________________
-
- class _ICLASS TServedObject;
- class _ICLASS TTypeLibrary;
- class _ICLASS TCoClassInfo;
- class _BIDSCLASS TRegLink;
-
- typedef IUnknown*
- (*TComponentFactory)(IUnknown* outer, uint32 options, uint32 id = 0);
-
- class _ICLASS TAppDescriptor : public IClassFactory {
- public:
- TAppDescriptor(TRegList& regInfo, TComponentFactory callback,
- string& cmdLine, HINSTANCE hInst = _hInstance,
- const TRegLink* regLink = 0);
- ~TAppDescriptor();
- operator IUnknown*() {return this;}
- bool IsAutomated() const {return ClassCount > 0;}
- TComponentFactory GetFactory() const {return FactoryCallback;}
- const TRegLink* GetRegLinkHead() const {return LinkHead;}
-
- // Command line options accessors
- bool IsOptionSet(uint32 option) const {return ToBool(Options&option);}
- uint32 GetOptions() const {return Options;}
- void SetOption(uint32 bit, bool state) {if (state) Options |= bit; else Options &= ~bit;}
- void ProcessCmdLine(string& cmdLine);
- void SetLangId(TLangId prevLang, const char* langIdStr);
-
- // Registration management functions
- void RegisterClass();
- void UnregisterClass();
- bool RegisterObject(TObjectDescriptor app);
- void UnregisterObject();
- TClassId GetLinkGuid(int index);
- void RegisterServer(TLangId lang, const char* regFile = 0);
- void UnregisterServer(TLangId lang = 0, const char* = 0);
- void MakeTypeLib(TLangId lang, const char* = 0);
-
- // TAutoClass management functions
- void MergeAutoClasses();
-
- // TypeLibrary management functions
- ITypeLib* GetTypeLibrary(); // caller MUST do a Release()
- ITypeInfo* CreateITypeInfo(TAutoClass& cls); // caller must release
- int GetClassCount() {return ClassCount;}
- TLangId GetAppLang() {return AppLang;}
- int GetClassIndex(TAutoClass* cls); // returns -1 if not found
- bool GetClassId(TAutoClass* cls, GUID& retId);
- TAutoClass* GetAutoClass(unsigned index);
- TAutoClass* GetAutoClass(const GUID far& clsid);
- TRegLink* GetRegLink(const GUID far& clsid);
- uint16 GetVersionField(uint field);
- const char* GetAppName(TLangId lang) {return AppName->Translate(lang);}
- const char* GetAppDoc(TLangId lang) {return AppDoc->Translate(lang);}
- const char* GetHelpFile(TLangId lang){return HelpFile->Translate(lang);}
- void WriteTypeLibrary(TLangId lang, const char far* file);
-
- // TServedObject management functions
- TUnknown* CreateAutoApp(TObjectDescriptor app, uint32 options,
- IUnknown* outer=0);
- void ReleaseAutoApp(TObjectDescriptor app);
- TUnknown* CreateAutoObject(TObjectDescriptor obj, TServedObject& app,
- IUnknown* outer=0);
- TUnknown* CreateAutoObject(const void* obj, const typeinfo& objInfo,
- const void* app, const typeinfo& appInfo,
- IUnknown* outer=0);
- TServedObject* FindServed(const void far* mostDerivedObj);
- TServedObject* FindServed(TObjectDescriptor& objDesc);
- void AddServed(TServedObject& obj);
- void RemoveServed(TServedObject& obj);
- void InvalidateObject(const void far* obj);
- void ReleaseObject(const void far* obj);
- bool IsBound() {return static_cast<bool>(ServedList != 0 || LockCount != 0);}
- bool IsActiveObject(TServedObject* obj) {return ActiveObject == obj;}
- void FlushServed();
-
- TBaseClassId AppClassId;
-
- private:
- void Init(IMalloc* alloc = 0); // called only from constructor
- TServedObject* ServedList; // list of outstanding IDispatch/ITypeInfo objs
- TServedObject* ActiveObject; // currently registered active object
- TRegList& RegInfo; // registration list for application
- const char* Version; // library version, stored as text string
- TLocaleString* AppProgId; // progid of application
- TLocaleString* AppName; // name of application, localizable
- TLocaleString* AppDoc; // description of application, localizable
- TLocaleString* HelpFile; // name of help file, localizable
- TAutoClass::TAutoClassRef*
- ClassList; // array of automated class references
- int ClassCount; // count of classes, set when first scanned
- int DebugGuidOffset;// GUID offset for /Debug registration
- int LibGuidOffset; // GUID offset for the app library
- int LinkGuidOffset; // GUID offset for the first doc template
- int LinkGuidCount; // count of GUIDs assigned to doc templates
- TLangId AppLang; // language Id for this running instance
- TTypeLibrary* TypeLib; // type library, only while referenced
- const TRegLink* LinkHead; // reglink list of reglists to register
- TComponentFactory FactoryCallback; // callback to create/destroy instance
- HINSTANCE AppInstance;
- unsigned long RefCnt;
- unsigned LockCount;
- unsigned long RegClassHdl; // for unregistration
- unsigned long RegObjectHdl; // for unregistration
- uint32 Options; // Command line option bit flags
-
- // for EXE or DLL component main, provide direct access for destructors
- // for auxilliary DLLs, a table must be maintained of AppDesc vs. task Id
- //
- static TAppDescriptor* This; // set by constructor to component instance
-
- // IUnknown interface
- HRESULT _IFUNC QueryInterface(const IID far& iid, void far* far* retIface);
- unsigned long _IFUNC AddRef();
- unsigned long _IFUNC Release();
-
- public:
-
- // IClassFactory interface
- HRESULT _IFUNC CreateInstance(IUnknown* outer, const IID FAR& iid,
- void far* far* retObject);
- HRESULT _IFUNC LockServer(BOOL lock);
-
- friend class _ICLASS TTypeLibrary;
- friend class _ICLASS TCoClassInfo;
- friend TAppDescriptor* GetAppDescriptor();
- };
-
- //
- // for EXE and DLL component main module, provide direct access to descriptor
- // for auxilliary DLLs, must use table of app descriptor vs. task Id
- //
- inline TAppDescriptor* GetAppDescriptor() {return TAppDescriptor::This;}
-
- class _ICLASS TTypeLibrary : public ITypeLib {
- public:
- TTypeLibrary(TAppDescriptor& appDesc, TLangId lang);
- ~TTypeLibrary();
- operator IUnknown&() {return *this;}
- ITypeInfo* CreateCoClassInfo();// component typeinfo, caller must release
-
- private:
- TAppDescriptor& AppDesc;
- unsigned long RefCnt;
- TLangId Lang;
- uint16 CoClassFlags; // type flags combined from autoclasses
- int CoClassImplCount; // number of interfaces in coclass
-
- // IUnknown interface
- HRESULT _IFUNC QueryInterface(const IID far& iid, void far* far* retIface);
- unsigned long _IFUNC AddRef();
- unsigned long _IFUNC Release();
-
- // ITypeLib interface
- unsigned int _IFUNC GetTypeInfoCount();
- HRESULT _IFUNC GetTypeInfo(unsigned index, ITypeInfo* far* retInfo);
- HRESULT _IFUNC GetTypeInfoType(unsigned index, TYPEKIND far* retKind);
- HRESULT _IFUNC GetTypeInfoOfGuid(const GUID far& guid,
- ITypeInfo* far* retInfo);
- HRESULT _IFUNC GetLibAttr(TLIBATTR far* far* retAttr);
- HRESULT _IFUNC GetTypeComp(ITypeComp* far* retComp);
- HRESULT _IFUNC GetDocumentation(int index, BSTR far* retName,
- BSTR far* retDoc,
- unsigned long far* retHelpContext,
- BSTR far* retHelpFile);
- HRESULT _IFUNC IsName(OLECHAR far* nameBuf, unsigned long hashVal,
- int far* retFound);
- HRESULT _IFUNC FindName(OLECHAR far* nameBuf, unsigned long lHashVal,
- ITypeInfo* far* retInfo, MEMBERID far* retId,
- unsigned short far* inoutCount);
- void _IFUNC ReleaseTLibAttr(TLIBATTR far* attr);
- };
-
- class _ICLASS TCoClassInfo : public ITypeInfo {
- public:
- TCoClassInfo(TAppDescriptor& appDesc, uint16 typeFlags, int implCount);
- ~TCoClassInfo();
- operator IUnknown&() {return *this;}
-
- private:
- TAppDescriptor& AppDesc;
- unsigned long RefCnt;
- uint16 TypeFlags; // type flags combined from autoclasses
- int ImplCount; // number of interfaces in coclass
- unsigned* ImplList; // array of indices to autoclasses
- int Default; // interface marked as default
- int DefaultEvent;// event interface marked as default,source
-
- // IUnknown interface
- HRESULT _IFUNC QueryInterface(const IID far& iid, void far* far* retIface);
- unsigned long _IFUNC AddRef();
- unsigned long _IFUNC Release();
-
- // ITypeInfo implementation
- HRESULT _IFUNC GetTypeAttr(TYPEATTR far* far* pptypeattr);
- HRESULT _IFUNC GetTypeComp(ITypeComp* far* pptcomp);
- HRESULT _IFUNC GetFuncDesc(unsigned int index, FUNCDESC far* far* ppfuncdesc);
- HRESULT _IFUNC GetVarDesc(unsigned int index, VARDESC far* far* ppvardesc);
- HRESULT _IFUNC GetNames(MEMBERID memid, BSTR far* rgbstrNames,
- unsigned int cMaxNames,
- unsigned int far* pcNames);
- HRESULT _IFUNC GetRefTypeOfImplType(unsigned int index, HREFTYPE far* phreftype);
- HRESULT _IFUNC GetImplTypeFlags(unsigned int index, int far* pimpltypeflags);
- HRESULT _IFUNC GetIDsOfNames(OLECHAR far* far* rgszNames,
- unsigned int cNames,
- MEMBERID far* rgmemid);
- HRESULT _IFUNC Invoke(void far* pvInstance, MEMBERID memid,
- unsigned short wFlags,
- DISPPARAMS far *pdispparams,
- VARIANT far *pvarResult,
- EXCEPINFO far *pexcepinfo,
- unsigned int far *puArgErr);
- HRESULT _IFUNC GetDocumentation(MEMBERID memid,
- BSTR far* pbstrName,
- BSTR far* pbstrDocString,
- ulong far* pdwHelpContext,
- BSTR far* pbstrHelpFile);
- HRESULT _IFUNC GetDllEntry(MEMBERID memid, INVOKEKIND invkind,
- BSTR far* pbstrDllName,
- BSTR far* pbstrName,
- unsigned short far* pwOrdinal);
- HRESULT _IFUNC GetRefTypeInfo(HREFTYPE hreftype,
- ITypeInfo* far* pptinfo);
- HRESULT _IFUNC AddressOfMember(MEMBERID memid, INVOKEKIND invkind,
- void far* far* ppv);
- HRESULT _IFUNC CreateInstance(IUnknown* punkOuter, const IID far& riid,
- void far* far* ppvObj);
- HRESULT _IFUNC GetMops(MEMBERID memid, BSTR far* pbstrMops);
- HRESULT _IFUNC GetContainingTypeLib(ITypeLib* far* pptlib,
- uint far* pindex);
- void _IFUNC ReleaseTypeAttr(TYPEATTR far* ptypeattr);
- void _IFUNC ReleaseFuncDesc(FUNCDESC far* pfuncdesc);
- void _IFUNC ReleaseVarDesc(VARDESC far* pvardesc);
- };
-
- //
- // external entry points for DLL servers
- //
- typedef HRESULT STDAPICALLTYPE (*TDllCanUnloadNow)();
- typedef HRESULT STDAPICALLTYPE (*TDllGetClassObject)(const GUID far& clsid,
- const GUID far& iid,
- void far* far* retObj);
- typedef HRESULT STDAPICALLTYPE (*TDllRegisterServer)();
- typedef HRESULT STDAPICALLTYPE (*TDllUnregisterServer)();
- typedef HRESULT STDAPICALLTYPE (*TDllRegisterCommand)(const char far* cmdLine);
-
- #endif // OCF_APPDESC_H
-
-
-