方法 |
描述 |
public: |
|
TComponent |
__fastcall virtual TComponent(TComponent* AOwner);
构造函数。
AOwner 为这个组件的拥有者,请参考 Owner 属性。 |
~TComponent |
__fastcall virtual ~TComponent(void);
析构函数 |
BeforeDestruction |
virtual void __fastcall BeforeDestruction(void);
重载了 TObject 的 BeforeDestruction。
在执行析构函数之前会自动调用 BeforeDestruction,不要直接调用这个函数。
在调用 BeforeDestruction 的时候,还没做任何销毁动作呢。
只有当构造函数完整执行完成的情况下,析构之前才会调用 BeforeDestruction,如果在构造函数里面抛出了异常,会调用析构函数,但是不会调用 BeforeDestruction。
重载这个函数可以处理析构函数调用之前需要运行的代码,
TComponent 组件在 BeforeDestruction 里面检查 Destroying 方法是否被调用了,如果没被调用过,就调用它。 |
BeginInvoke |
System::Types::_di_IAsyncResult __fastcall BeginInvoke(const System::Sysutils::_di_TProc AProc, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
System::Types::_di_IAsyncResult __fastcall BeginInvoke(const TAsyncProcedureEvent AProc, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
template<typename TResult> System::Types::_di_IAsyncResult __fastcall BeginInvoke(const System::DelphiInterface<System::Sysutils::TFunc__1<TResult> > AFunc, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
System::Types::_di_IAsyncResult __fastcall BeginInvoke(const _di_TAsyncConstArrayProc AProc, const System::TVarRec *Params, const int Params_High, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
template<typename TResult> System::Types::_di_IAsyncResult __fastcall BeginInvoke(const System::DelphiInterface<TAsyncConstArrayFunc__1<TResult> > AFunc, const System::TVarRec *Params, const int Params_High, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
System::Types::_di_IAsyncResult __fastcall BeginInvoke(const TAsyncConstArrayProcedureEvent AProc, const System::TVarRec *Params, const int Params_High, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
System::Types::_di_IAsyncResult __fastcall BeginInvoke(const TAsyncConstArrayFunctionEvent AFunc, const System::TVarRec *Params, const int Params_High, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
System::Types::_di_IAsyncResult __fastcall BeginInvoke(const TAsyncFunctionEvent AFunc, System::TObject* const AContext = (System::TObject*)(0x0))/* overload */;
异步调用 AProc 或 AFunc。AContext 提供执行的内容,在主线程里面执行。如果是从 TControl 继承的,执行在最近创建的窗口句柄所在的线程。
返回值:IAsyncResult 类型的异步执行的结果。 |
EndInvoke |
void __fastcall EndInvoke(const System::Types::_di_IAsyncResult ASyncResult)/* overload */;
template<typename TResult> TResult __fastcall EndInvoke(const System::Types::_di_IAsyncResult AsyncResult)/* overload */;
等待异步执行的结果,返回 BeginInvoke 的执行结果。EndInvoke 会抛出在异步执行当中发生的异常。 |
EndFunctionInvoke |
System::TObject* __fastcall EndFunctionInvoke(const System::Types::_di_IAsyncResult AsyncResult);
等待异步执行的结果,返回 BeginInvoke 的执行结果,返回结果类型为 TObject *。EndInvoke 会抛出在异步执行当中发生的异常。 |
DestroyComponents |
void __fastcall DestroyComponents(void);
销毁所有容纳的子组件。
不需要直接调用这个方法,当组件被销毁的时候,会自动调用 DestroyComponents 来销毁所有的子组件。 |
Destroying |
void __fastcall Destroying(void);
指示这个组件,和这个组件容纳的所有子组件,都将被销毁。
Destroying 方法会在 ComponentState 属性里面添加 csDestroying 状态标志。
不需要直接调用这个方法,当组件被销毁的时候,会自动调用 Destroying 方法。 |
ExecuteAction |
DYNAMIC bool __fastcall ExecuteAction(TBasicAction* Action);
执行一个 Action。Action 可以是一个 TBasicAction 或者从 TBasicAction 继承的类。
ExecuteAction 方法检查 Action 是否和这个组件兼容并且执行这个 Action。
如果执行了 Action,函数返回 true,如果没执行,返回 false。
子类可以重载 ExecuteAction 提供对 Action 的不同的执行方法。 |
FindComponent |
TComponent* __fastcall FindComponent(const System::UnicodeString AName);
通过名称 AName 查找子组件,不区分大小写。 |
FreeNotification |
void __fastcall FreeNotification(TComponent* AComponent);
把这个组件将要被销毁的信息通知给 AComponent。
当这个组件和 AComponent 在不同的 Form 里面或者 Owner 不同的情况,AComponent 把这个组件当作属性的时候,这个组件被销毁的时候需要通知给 AComponent。 |
RemoveFreeNotification |
void __fastcall RemoveFreeNotification(TComponent* AComponent);
把 FreeNotification 的通知信息去掉。
大多数情况应用程序不需要调用这个方法,组件检测到通知循环,比如当两个组件互相通知对方销毁信息的时候,需要去掉不必要的通知信息。 |
FreeOnRelease |
void __fastcall FreeOnRelease(void);
使用 COM 接口的组件,当调用 Release 方法的时候,会调用这个方法。
FreeOnRelease 是组件内部调用的方法,不要直接调用。 |
GetEnumerator |
TComponentEnumerator* __fastcall GetEnumerator(void);
返回一个枚举对象,枚举某个容器里面所有组件的枚举对象。
如果处理所有的子组件,在一个循环里面,调用 TComponentEnumerator 里面的 GetCurrent 方法获取组件,调用 MoveNext 来循环每个组件。 |
GetParentComponent |
DYNAMIC TComponent* __fastcall GetParentComponent(void);
返回容器组件。如果这个组件没有放在容器里面,返回值为 NULL。
用 HasParent 方法可以获取这个组件是否在容器组件里面。
例如,把 Button 放在了 Form 上的 Panel 里面了,那么 Button 的 Parent 是 Panel,Panel 的 Parent 是 Form,而 Form 的 Parent 是 NULL。 |
GetNamePath |
DYNAMIC System::UnicodeString __fastcall GetNamePath(void);
重载了 TPersistent 的 GetNamePath 方法。
返回在 Object Inspector 属性面板里面的名称。对于控件,返回控件的名称,对于 TCollectionItem 对象,返回宿主控件的名称、属性名和 [索引号]。
TComponent 组件重载这个方法用来返回组件的名称,组件内部使用,不要直接调用这个方法。 |
HasParent |
DYNAMIC bool __fastcall HasParent(void);
获取这个组件是否放在了容器里面。如果放在了容器里面,返回 true。
可以用 GetParentComponent 获取容器组件,请参考 GetParentComponent 方法。 |
InsertComponent |
void __fastcall InsertComponent(TComponent* const AComponent);
把 AComponent 作为这个组件的子组件,加入 Components 属性里面。
AComponent 的 Name 属性可以为空,如果不为空,必须不能和 Components 里面其他组件同名。
这个组件被销毁的时候,AComponent 也会被销毁。
在使用画面编辑器的设计期间,这个工作是自动处理的。 |
RemoveComponent |
void __fastcall RemoveComponent(TComponent* const AComponent);
把 AComponent 从子组件 Components 里面移除。
在使用画面编辑器的设计期间,这个工作是自动处理的。 |
SetSubComponent |
void __fastcall SetSubComponent(bool IsSubComponent);
设置这个组件为 SubComponent,如果参数 IsSubComponent 为 true,会在 ComponentStyle 属性里面添加 csSubComponent 样式,否则会去掉这个样式。 |
SafeCallException |
virtual HRESULT __fastcall SafeCallException(System::TObject* ExceptObject, void * ExceptAddr);
重载了 TObject 的 SafeCallException。
TComponent 调用这个方法,当它支持 COM 接口的时候,处理接口的异常。如果不支持 COM 接口,会调用 TObject 的这个方法,即返回 E_UNEXPECTED。 |
UpdateAction |
virtual bool __fastcall UpdateAction(TBasicAction* Action);
更新 Action 的状态。Action 可以是 TBasicAction 或从 TBasicAction 继承的子类对象。
返回 true,如果更新了 Action 的状态,返回 false 如果没有更新。
子类可以重载这个方法了提供不同的处理方法。 |
IsImplementorOf |
bool __fastcall IsImplementorOf(const System::_di_IInterface I);
这个方法与 QueryInterface 类似,不同的是,这个方法支持 NULL 接口请求,不返回接口指针。
流处理系统利用这个方法来存取接口类型的属性值。 |
ReferenceInterface |
bool __fastcall ReferenceInterface(const System::_di_IInterface I, TOperation Operation);
建立或移除内部链接来通知这个组件,当指定的接口被销毁的时候。当组件的属性是接口的时候使用。
I 是 __published: 属性的接口指针,Operation 的值可以为:opInsert: 建立,opRemove: 移除。
返回值:true 为执行成功,false 为执行失败。 |
operator
_di_IInterfaceComponentReference() |
operator _di_IInterfaceComponentReference()
{
_di_IInterfaceComponentReference intf;
this->GetInterface(intf);
return intf;
}
类型转换操作符,把当前组件转为 _di_IInterfaceComponentReference 类型时使用。 |
operator
_di_IInterface() |
operator System::_di_IInterface()
{
System::_di_IInterface intf;
this->GetInterface(intf);
return intf;
}
类型转换操作符,把当前组件转为 _di_IInterface 类型时使用。 |
TPersistent:: |
从 TPersistent 继承过来的 |
Assign |
virtual void __fastcall Assign(TPersistent *Source);
把 Source 对象的所有的属性和数据赋值到当前对象,包括类型和格式转换再赋值。
【例:jpg, gif, png, bmp 之间的格式转换】 |
TObject:: |
从 TObject 继承过来的 |
Free |
void __fastcall Free(void);
C++ 程序需要用 delete 来销毁对象,不要调用 Free 方法。
Delphi 程序可以通过调用 Free 方法来调用析构函数释放分配的内存,空指针和未初始化的对象调用 Free 不会出错。 |
DisposeOf |
void __fastcall DisposeOf(void);
PC 版本,相当于 Free;移动版本,会强制销毁对象无论 RefCount 的值是多少,并且置 Disposed 属性为 true. |
InitInstance |
__classmethod __unsafe TObject* __fastcall InitInstance(void * Instance);
初始化成员,给他们清零。这是 NewInstance 内部调用的函数,不要直接调用 InitInstance。
重载 NewInstance 的时候,在 NewInstance 的最后一句要调用 InitInstance。
不要重载 InitInstance,因为它不是 virtual 函数。 |
NewInstance |
__classmethod virtual __unsafe TObject* __fastcall NewInstance();
NewInstance 给实例分配内存,并且返回新的实例的地址,通过调用 InstanceSize 获取需要的内存的字节数。
构造函数会自动调用 NewInstance,不要直接调用 NewInstance。
如果重载了 NewInstance 分配内存,就必须重载 FreeInstance 释放内存。 |
InstanceSize |
__classmethod int __fastcall InstanceSize();
返回给实例数据分配内存需要多少字节数。
不要重载 InstanceSize 因为它不是 virtual 函数。
只有在重载的 NewInstance 函数里面需要调用 InstanceSize。 |
FreeInstance |
virtual void __fastcall FreeInstance(void);
释放 NewInstance 分配的内存。
析构函数会自动调用 FreeInstance,不要直接调用 FreeInstance。
如果重载了 NewInstance 就必须重载 FreeInstance 与之对应。
和 NewInstance 一样,FreeInstance 也是通过 InstanceSize 获取释放内存的字节数。 |
CleanupInstance |
void __fastcall CleanupInstance(void);
清除长字符串、Variants、接口变量等,把长字符串置为 Empty,Variant 置为 Unassigned 状态。
不要直接调用 CleanupInstance,会在销毁实例的时候自动调用。 |
ClassType |
TClass __fastcall ClassType(void);
返回类的类型信息【例1:获取控件对象的类及这个类的祖先】
C++ 程序可以使用 dynamic_cast 或 InheritsFrom 来代替 ClassType 方法。 |
ClassName |
__classmethod UnicodeString __fastcall ClassName();
获取类名。如果父类指针指向的是子类,通过父类指针获取类名,得到的是子类的类名。 |
ClassNameIs |
__classmethod bool __fastcall ClassNameIs(const UnicodeString Name);
判断类名是否为 Name。如果父类指针指向的是子类,通过父类指针判断类名,用的是子类的类名进行判断。 |
QualifiedClassName |
__classmethod UnicodeString __fastcall QualifiedClassName();
返回包含命名空间的类名,例如 TButton 类型返回的是 "Vcl.StdCtrls.TButton"
UnitName 和 ClassName 合在一起就是 QualifiedClassName |
UnitName |
__classmethod UnicodeString __fastcall UnitName();
返回类所在的命名空间,例如 TButton 类型返回的是 "Vcl.StdCtrls"
UnitName 和 ClassName 合在一起就是 QualifiedClassName |
UnitScope |
__classmethod UnicodeString __fastcall UnitScope();
和 UnitName 返回的结果相同。 |
ClassParent |
__classmethod TClass __fastcall ClassParent();
返回父类的类型信息【例1:获取控件对象的类及这个类的祖先】
C++ 程序可以使用 dynamic_cast 或 InheritsFrom 来代替 ClassParent 方法。 |
ClassInfo |
__classmethod void * __fastcall ClassInfo();
返回运行时类型信息表 (RTTI table)。
不是所有的类都提供 RTTI 信息表,如果没有提供,返回值为 NULL。
从 TPersistent 继承的类会提供 RTTI 信息表。 |
InheritsFrom |
__classmethod bool __fastcall InheritsFrom(TClass AClass);
当前对象的类是否从 AClass 继承过来的。AClass 是父类、父类的父类,…… 一直到祖先,返回为真。 |
MethodAddress |
__classmethod void * __fastcall MethodAddress(const ShortString &Name)/* overload */;
__classmethod void * __fastcall MethodAddress(const UnicodeString Name)/* overload */;
通过名称返方法的地址。 |
MethodName |
__classmethod UnicodeString __fastcall MethodName(void *Address);
通过方法的地址返回名称。 |
FieldAddress |
void * __fastcall FieldAddress(const ShortString &Name)/* overload */;
void * __fastcall FieldAddress(const UnicodeString Name)/* overload */;
返回 __published: 成员的地址。 |
GetInterface |
bool __fastcall GetInterface(const GUID &IID, /* out */ void *Obj);
template <typename T>
bool __fastcall GetInterface(DelphiInterface<T>& smartIntf)
{
return GetInterface(__uuidof(T), reinterpret_cast<void*>(static_cast<T**>(&smartIntf)));
}
Delphi 的 IID 允许用接口名称,编译器会自动采用类型的 GUID。
C++ 可以用模板版本的 GetInterface,相当于 dynamic_cast,GetInterface 在转为不支持的类型的时候不会抛出异常,只是得到的指针为 NULL,请参考 TInterfacedPersistent 的 operator
_di_IInterface()。
参数 Obj 虽然是 void * 类型的,但是实质上是 void ** 类型的,必须把 void ** 强制转为 void * 作为 Obj 参数。 |
GetInterfaceEntry |
__classmethod PInterfaceEntry __fastcall GetInterfaceEntry(const GUID &IID);
获取接口项目 |
GetInterfaceTable |
__classmethod PInterfaceTable __fastcall GetInterfaceTable();
获取接口表 |
Equals |
virtual bool __fastcall Equals(TObject *Obj);
比较当前对象和 Obj 对象是否相同。从 TObject 继承的子类需要重载 Equals 来提供比较相同的方法。 |
GetHashCode |
virtual int __fastcall GetHashCode(void);
返回一个整数的 hash 值,默认的,返回的整数值为对象的地址。
测试程序:int a = Sender->GetHashCode();
int b = (int)Sender; 发现 a 和 b 的值相等。 |
ToString |
virtual UnicodeString __fastcall ToString(void);
转为字符串。默认的,ToString 返回类名,和 ClassName 的返回值相同。
如果需要其他的转字符串方式,需要用重载 ToString 来提供转为字符串的方法。 |
AfterConstruction |
virtual void __fastcall AfterConstruction(void);
在构造函数结束的时候会自动调用 AfterConstruction,不要直接调用这个函数。
重载这个函数可以处理在构造函数结束时需要运行的代码,
例如 TCustomForm 利用重载的 AfterConstruction 来产生 OnCreate 事件。 |
Dispatch |
virtual void __fastcall Dispatch(void *Message);
如果从 TObject 类继承的类处理了消息,Dispatch 为处理消息的函数。
如果没有处理的消息,会调用父类的消息处理,如果仍然没有处理,调用 DefaultHandler。 |
DefaultHandler |
virtual void __fastcall DefaultHandler(void *Message);
默认的消息处理。如果 Dispatch 处理消息的过程,没有找到处理的方法,会调用 DefaultHandler 进行默认的消息处理。 |
protected: |
|
AsyncSchedule |
virtual void __fastcall AsyncSchedule(TBaseAsyncResult* const ASyncResult);
把异步执行 ASyncResult 添加到主线程的队列里面。 |
ChangeName |
void __fastcall ChangeName(const TComponentName NewName);
给组件改名为 NewName。通过给 Name 属性赋值来调用这个方法。
ChangeName 不是 virtual 函数,不要重载这个函数,可以用重载 SetName 方法来替代。 |
DefineProperties |
virtual void __fastcall DefineProperties(TFiler* Filer);
重载了 TPersistent 的 DefineProperties。
提供把非 __published: 属性和数据存入流中,是 protected: 方法。
如果子类需要这个功能,需要重载这个函数,在重载的 DefineProperties 需要调用父类的 DefineProperties,Filter 的 DefineProperty 和 DefineBinaryProperty。 |
GetChildren |
DYNAMIC void __fastcall GetChildren(TGetChildProc Proc, TComponent* Root);
枚举所有的子组件。这个方法是 TComponent 内部使用的,不要直接调用。
Proc 为回调函数,用来接收枚举出来的组件,Root 为需要枚举子组件的组件。 |
GetChildOwner |
DYNAMIC TComponent* __fastcall GetChildOwner(void);
当从流里面读取的时候,返回一个子组件的 Owner;如果没有 Owner 返回 NULL。
这是 TComponent 内部调用的方法,不需要直接调用。 |
GetChildParent |
DYNAMIC TComponent* __fastcall GetChildParent(void);
当从流里面读取的时候,返回一个子组件的 Parent (容器组件),如果没有 Parent 则返回 Owner。 |
GetOwner |
DYNAMIC TPersistent* __fastcall GetOwner(void);
重载了 TPersistent 的 GetOwner。
返回对象的拥有者,是 protected: 方法。GetNamePath 方法会调用 GetOwner。
TPersistent 的 GetOwner 只是简单的返回 NULL。
例如,TOwnedCollection 的 GetOwner 返回这个 collection 的 owner;TCollectionItem 的 GetOwner 返回这个项目添加在哪个 collection object 里面了,组件 (TComponent) 的 GetOwner 返回组件的 Owner 属性。 |
Loaded |
virtual void __fastcall Loaded(void);
当 Form 读取到内存的时候,初始化这个组件。
不要直接调用这个方法,当流处理系统从流里面读取这个组件的时候,会自动调用。
Loaded 会清除 ComponentState 属性里面的 csLoading 状态标志。
Loaded 会被调用多次,如果是被继承的 Form,所以不要在这里做分配内存的操作,除非有办法阻止多次被调用的时候多次分配内存。 |
Notification |
virtual void __fastcall Notification(TComponent* AComponent, TOperation Operation);
AComponent 发过来的创建或移除消息,会自动调用这个方法。
Operation 的值可能为:opInsert: 建立,或者 opRemove: 移除。 |
GetDeltaStreams |
DYNAMIC void __fastcall GetDeltaStreams(TGetStreamProc Proc);
TComponent 内部调用的方法,帮助里面没有相关的说明。 |
PaletteCreated |
DYNAMIC void __fastcall PaletteCreated(void);
组件在组件面板里面创建的时候,会自动调用这个方法。
TComponent 里面,PaletteCreated 并没有实现任何功能,子类可以重载这个方法来实现需要的操作。 |
ReadState |
virtual void __fastcall ReadState(TReader* Reader);
读取组件的状态,是组件内部调用的方法,不需要直接调用。 |
CanObserve |
virtual bool __fastcall CanObserve(const int ID);
帮助里面没有相关说明。
和这个组件的 Observers 属性,和 LiveBindings 相关。 |
ObserverAdded |
virtual void __fastcall ObserverAdded(const int ID, const _di_IObserver Observer);
帮助里面没有相关说明。
和这个组件的 Observers 属性,和 LiveBindings 相关。 |
GetObservers |
virtual TObservers* __fastcall GetObservers(void);
Observers 属性利用这个方法返回属性值。 |
SetAncestor |
void __fastcall SetAncestor(bool Value);
清除或设置 ComponentState 属性里面的 csAncestor 状态。
这是 TComponent 内部调用的方法,不需要直接调用。 |
SetDesigning |
void __fastcall SetDesigning(bool Value, bool SetChildren = true);
清除或设置 ComponentState 属性里面的 csDesigning 状态。
这是 TComponent 内部调用的方法,不需要直接调用。 |
SetInline |
void __fastcall SetInline(bool Value);
清除或设置 ComponentState 属性里面的 csInline 状态。
这是 TComponent 内部调用的方法,不需要直接调用。 |
SetDesignInstance |
void __fastcall SetDesignInstance(bool Value);
清除或设置 ComponentState 属性里面的 csDesignInstance 状态。
这是 TComponent 内部调用的方法,不需要直接调用。 |
SetName |
virtual void __fastcall SetName(const TComponentName NewName);
给属性 Name 赋值调用这个方法来修改组件名,SetName 调用 ChangeName 方法来实现改名。
ChangeName 不是 virtual 函数,不要重载 ChangeName,可以用重载 SetName 方法来替代。 |
SetChildOrder |
DYNAMIC void __fastcall SetChildOrder(TComponent* Child, int Order);
调整子组件的顺序,这是内部调用的方法,不要直接调用。 |
SetParentComponent |
DYNAMIC void __fastcall SetParentComponent(TComponent* Value);
设置组件的 Parent (容器组件),这是组件内部使用的方法,不要直接调用。
可以重载这个方法来实现在设置 Parent 的时候执行一段代码。 |
Updating |
DYNAMIC void __fastcall Updating(void);
设置 ComponentState 属性里面的 csUpdating 状态。
这是 TComponent 内部调用的方法,不需要直接调用。 |
Updated |
DYNAMIC void __fastcall Updated(void);
清除 ComponentState 属性里面的 csUpdating 状态。
这是 TComponent 内部调用的方法,不需要直接调用。 |
UpdateRegistry |
__classmethod virtual void __fastcall UpdateRegistry(bool Register, const System::UnicodeString ClassID, const System::UnicodeString ProgID);
如果组件实现了 COM 接口,UpdateRegistry 会在注册表里面添加类型库信息。
这是组件内部调用的方法,不要直接调用。 |
ValidateRename |
virtual void __fastcall ValidateRename(TComponent* AComponent, const System::UnicodeString CurName, const System::UnicodeString NewName);
在给组件改名的时候会调用这个函数,检查名称是否有效。 |
ValidateContainer |
DYNAMIC void __fastcall ValidateContainer(TComponent* AComponent);
检查组件是否可以放入容器。
当把组件放入容器的时候,会调用这个方法,这个方法会调用 ValidateInsert 方法来检查,如果不可以放入容器,会抛出异常。 |
ValidateInsert |
DYNAMIC void __fastcall ValidateInsert(TComponent* AComponent);
把组件放入容器的时候,会调用这个方法来检查是否可以放入容器,如果不可以,会抛出异常。 |
WriteState |
virtual void __fastcall WriteState(TWriter* Writer);
写入组件的状态,由流处理系统自动调用,不需要直接调用。 |
RemoveFreeNotifications |
void __fastcall RemoveFreeNotifications(void);
通知所有的 Owner 这个组件要被销毁了。当组件被销毁的时候,会自动调用这个方法。 |
QueryInterface |
virtual HRESULT __stdcall QueryInterface(const GUID &IID, /* out */ void *Obj);
返回当前组件所支持的 COM 接口的引用到 Obj,函数返回值为 S_OK;
如果不支持,Obj 返回 NULL,函数返回值为 S_FALSE, E_NOINTERFACE, E_UNEXPECTED, 或 E_NOTIMPL 等。 |
_AddRef |
int __stdcall _AddRef(void);
如果组件封装的是 COM 接口,会调用 COM 接口的 _AddRef 增加引用计数,返回值为当前的引用计数值;如果封装的不是 COM 接口,直接返回 -1。 |
_Release |
int __stdcall _Release(void);
如果组件封装的是 COM 接口,会调用 COM 接口的 _Release 减少引用计数,返回值为当前的引用计数值,如果计数值等于 0,会销毁对象,释放占用的资源。如果封装的不是 COM 接口,直接返回 -1。 |
GetTypeInfoCount |
HRESULT __stdcall GetTypeInfoCount(/* out */ int &Count);
如果封装的是 IDispatch 会实现 IDispatch 的 GetTypeInfoCount 返回类型信息的个数,如果支持类型信息,返回 1,否则返回 0。 |
GetTypeInfo |
HRESULT __stdcall GetTypeInfo(int Index, int LocaleID, /* out */ void *TypeInfo);
如果封装的是 IDispatch 会实现 IDispatch 的 GetTypeInfo 返回类型信息。 |
GetIDsOfNames |
HRESULT __stdcall GetIDsOfNames(const GUID &IID, void * Names, int NameCount, int LocaleID, void * DispIDs);
把 COM 接口的方法的名字和参数映射成一组 DISPID
如果封装的是 IDispatch 会实现 IDispatch 的 GetIDsOfNames |
Invoke |
HRESULT __stdcall Invoke(int DispID, const GUID &IID, int LocaleID, System::Word Flags, void *Params, void * VarResult, void * ExcepInfo, void * ArgErr);
如果这个组件封装了 COM 对象,Invoke 提供访问 COM 对象的属性和调用 COM 对象的方法。
如果组件封装的是 IDispatch 接口,Invoke 会调用 IDispatch 的 Invoke 方法,并且把参数传递给 IDispatch 的 Invoke 方法。 |
TPersistent:: |
从 TPersistent 继承过来的 |
AssignTo |
virtual void __fastcall AssignTo(TPersistent* Dest);
把当前对象的所有属性和数据都赋值到 Dest 对象。
TPersistent 的 AssignTo 是 protected: 方法,只是简单的抛出 EConvertError 异常,
从 TPersistent 继承的子类必须重载 AssignTo 来实现这个方法。 |