谁能给我讲一下Com中接口继承,最好举个列子(100分)

  • 主题发起人 主题发起人 zkp
  • 开始时间 开始时间
Z

zkp

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样的,我有一个Doc,一个Bill,Bill希望从Doc继承,并且做成Com组件,怎样实现?
thanks!
 
我顶,是不是问题太难了,不一定需要继承,只要能实现部件重用就行了。
 
Doc 和 Bill 都是 C++ class,再做一个 COM 的情况比较简单,
Doc 和 Bill COM,Bill 继承do
c 的接口就比较复杂些。
 
如果Doc 和 Bill都是Delphi Class,再做一个 COM ,怎样实现。
 
Doc 和 Bill 都是 C++ class,再做一个 COM, ITest
classdo
c {
//intdo
cId;
};
class Bill {
//int BillId;
};
class ATL_NO_VTABLE CTest1 :
public Bill,
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CTest1, &amp;CLSID_Test1>,
public IDispatchImpl<ITest1, &amp;IID_ITest1, &amp;LIBID_TESTLib>
{
public:
CTest1()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_TEST1)
DECLARE_PROTECT_FINAL_CONSTRUCT()
begin
_COM_MAP(CTest1)
COM_INTERFACE_ENTRY(ITest1)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// ITest1
public:
};
 
Delphi 没有多重继承, 只能用聚集(class aggregation)的办法,
如果do
c 和 Bill 都是 Delphi class,再做一个 COM, ITest
type
TDoc = class
do
cId: integer;
end;
TBill = class(TDoc)
BillId: integer;
end;
TTest = class(TTypedComObject, ITest)
protected
Bill: TBill;
end;

implementation
uses ComServ;
initialization
TTypedComObjectFactory.Create(ComServer, TTest, Class_Test,
ciMultiInstance, tmApartment);
end.
 
thank you
如果使用聚集,要多写重复代码,不过好像没有其他办法了。
 
后退
顶部