ATL 中增加双接口
来源:互联网 发布:淘宝小样 编辑:程序博客网 时间:2024/06/11 04:52
atl中增加双接口的过程有:
1 修改IDL文件:增加接口的描述
[
object,
uuid(692D03A4-C689-11CE-B337-88EA36DE9E4E),
dual,
helpstring("IMotion interface")
]
interface IMotion : IDispatch
{
HRESULT Fly();
HRESULT GetPosition([out,retval]long* nPosition);
};
[
object,
uuid(692D03A5-C689-11CE-B337-88EA36DE9E4E),
helpstring("IVisual interface")
]
interface IVisual : IUnknown
{
HRESULT Display();
};
//ps:书上一句 "再次通过MIDL编译器运行IDL. MIDL编译器将产生一个新的Spaceshipsvr.h,其中包含了IMotion和IVisual的纯抽象基类,对本菜鸟产生严重误导,以为其他一切都自动了..
2 修改BEGIN_COM_MAP()宏 避免 IDispatch的冲突
原来是这个样子di:
BEGIN_COM_MAP(CClassicATSpaceShip)
COM_INTERFACE_ENTRY(IClassicATSpaceShip)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
改成
BEGIN_COM_MAP(CClassicATSpaceShip)
COM_INTERFACE_ENTRY(IClassicATSpaceShip)
COM_INTERFACE_ENTRY2(IDispatch,IClassicATSpaceShip) //这里会避免请求IDispatch的时候冲突
COM_INTERFACE_ENTRY(IMotion)
COM_INTERFACE_ENTRY(IVisual)
END_COM_MAP()
3,让class继承这些接口
在class的父类中加入这么几个:
public IDispatchImpl<IMotion, &IID_IMotion,
&LIBID_ClassicATLSpaceShipSvrLib>,
public IDispatchImpl<IVisual, &IID_IVisual,
&LIBID_ClassicATLSpaceShipSvrLib>
4.增加函数声明 定义
在.h文件中增加
STDMETHOD(Fly)();
STDMETHOD(GetPosition)(long* lPosition);
STDMETHOD(Display)();
在.cpp文件中增加
STDMETHODIMP CClassicATSpaceShip::Fly()
{
AtlTrace("Flying the Classic ATL object/n");
return S_OK;
}
STDMETHODIMP CClassicATSpaceShip::GetPosition(long* lPosition)
{
AtlTrace("Getting the position of the Classic ATL object/n");
*lPosition = m_lPosition;
return S_OK;
}
STDMETHODIMP CClassicATSpaceShip::Display()
{
AtlTrace("Displaying the classic ATL object/n");
return S_OK;
}
大致上来说,就是这么几个过程,都要手动增加,没有wizard,一切都只有你的双手..
现在我严重鄙视 visual c++.net 技术内幕,翻译不到位,动不动还有 "-"出现 例如:
ClassicATL-Spaceship.cpp
编译了IDL文件以后会得到一个相应的.h文件,里面是纯虚类(在当前例子中就会包含 IMotion 和IVsiaul)
默认情况下这个.h是没有被包含在 project里面的,project中会使用include包含这个.h文件(用于模板类生继承)
- ATL 中增加双接口
- 使用ATL为COM组件增加多个双接口
- js中调用Atl接口参数返回
- 在ATL接口中添加自定义函数
- atl接口
- JavaScript中调用ATL双接口简单对象(无界面的AxtiveX控件)
- ATL中IUnknown接口的实现(一)
- ATL 实现IObjectSafety接口
- ATL 实现IObjectSafety 接口
- Atl 重载 objsafe接口
- ATL IDispatch调度接口
- 在DVR中增加UTC-CGI接口
- 用ATL实现在COM接口中返回另一个COM类的接口
- ATL--创建简单的ATL之dll工程,添加类和类的接口并在MFC中调用
- ATL接口映射宏详解
- ATL接口映射宏详解
- ATL接口映射宏详解
- ATL接口映射宏详解
- 使用UltraWebGrid控件分页功能注意事项
- (转)世界上最美丽的英文
- Hibernate要点(一)
- Hibernate要点(二)
- css
- ATL 中增加双接口
- 增添趣味: 给单调的 Windows 窗体应用程序增添趣味
- C#书写规范
- 位运算_求一个数有多少个因子2
- 素数_筛选法产生素数
- 认识ASP.NET配置文件Web.config
- 素数_判断是否素数
- &&情侣开房记&&
- System.Messaging 性能