WEB开发网
开发学院软件开发VC 组件对象模型与ATL实现 阅读

组件对象模型与ATL实现

 2010-09-04 20:48:02 来源:WEB开发网   
核心提示:遗憾的是,这不是我需要的结果,组件对象模型与ATL实现(4),我们需要修改类型库文件,修改后的结果如下:// MapLib.idl : MapLib 的IDL 源 此文件将由MIDL 工具处理以// 产生类型库(MapLib.tlb)和封送处理代码

遗憾的是,这不是我需要的结果,我们需要修改类型库文件,修改后的结果如下:

// MapLib.idl : MapLib 的IDL 源
//

// 此文件将由MIDL 工具处理以
// 产生类型库(MapLib.tlb)和封送处理代码。

#include "olectl.h"
import "oaidl.idl";
import "ocidl.idl";

[
     uuid(C8C046AB-3D44-45EF-B11C-C5822862049A),
     version(1.0),
     helpstring("MapLib 1.0 类型库")
]
library MapLibLib
{
     importlib("stdole2.tlb");

     interface ICanvas; // 预先声明

    [
        object,
        uuid(A74C036D-B046-4F53-B53A-F8EF611F576D),
        dual,
        nonextensible,
        helpstring("ICanvas 接口"),
        pointer_default(unique)
    ]
    interface ICanvas : IDispatch{
        [propput, bindable, requestedit, id(DISPID_BACKCOLOR)]
        HRESULT BackColor([in]OLE_COLOR clr);
        [propget, bindable, requestedit, id(DISPID_BACKCOLOR)]
        HRESULT BackColor([out,retval]OLE_COLOR* pclr);
        [propput, bindable, requestedit, id(DISPID_APPEARANCE)]
        HRESULT Appearance([in]short nAppearance);
        [propget, bindable, requestedit, id(DISPID_APPEARANCE)]
        HRESULT Appearance([out, retval]short* pnAppearance);
    };

     [
         uuid(BC3D7FCC-C1AE-4476-A59C-431457A1173C),
         control,
         helpstring("Canvas Class")
     ]
     coclass Canvas
     {
         [default] interface ICanvas;
     };
};

我只是把ICanvas接口部分移到了library MapLibLib{... ...}内,并增加了接口的预先声明:interface ICanvas;我习惯把下面一句添加到CCanvas的构造方法里:

m_bWindowOnly = TRUE; // 必须:总是创建自己的窗口

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:组件 对象 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接