这是根据”dr. gui and atl” 的文章自己做的例子程序,主要是在原有接口上继承新的接口,这样在保留原接口的基础上可以扩展新的功能.
功能介绍:
1.创建calculate组件,添加ifun接口(注意:本例我们在attributes中我们选择apartment,custom,yes).在ifun接口中添加函数add实现两数相加的功能(参数为[in] long n1, [in] long n2, [out, retval] long *pval).代码如下:
stdmethodimp ccalculate::add(long n1, long n2, long *pval)
{
// todo: add your implementation code here
*pval = n1 + n2;
return s_ok;
}
2.添加ifun2接口,继承ifun接口.步骤如下:
(1)修改.idl文件:
在
interface ifun : iunknown
{
[helpstring("method add")] hresult add([in] long n1, [in] long n2, [out, retval] long *pval);
};
下添加代码:
[
object,
uuid(b9d75722-1950-405b-8bb6-9788a6db1db2), //是接口ifun2的标志数,可由vs的guidgen.exe产生
helpstring("ifun2 interface"),
pointer_default(unique)
]
interface ifun2 : ifun
{
};
同时将末尾coclass calculate函数改为
coclass calculate
{
interface ifun;
[default] interface ifun2;
};
(2) 修改calculate.h文件
将
class atl_no_vtable ccalculate :
public ccomobjectrootex,
public ccomcoclass,
public ifun
改为
class atl_no_vtable ccalculate :
public ccomobjectrootex,
public ccomcoclass,
public ifun2
在
begin_com_map(ccalculate)
com_interface_entry(ifun)
end_com_map()
中添加
com_interface_entry(ifun2)
(3) 在ifun2接口中添加sub函数,方法同添加add函数不再重复,只是实现时改为
*pval = n1 - n2; // 返回两数差.
(4) 编写客户端代码,调用ifun2接口的add和sub函数.
开发环境: vc6 windows 2000/xp
测试环境:windows 2000 windowsxp