组件对象模型与ATL实现
2010-09-04 20:48:02 来源:WEB开发网遗憾的是,这不是我需要的结果,我们需要修改类型库文件,修改后的结果如下:
// 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; // 必须:总是创建自己的窗口
更多精彩
赞助商链接