1 新建一个ATL项目

image.png
image.png

2 设置ATL项目属性

支持组件注册”指的是 编译结束后会自动进行组件注册
image.png

3 等待创建完成, 出现两个项目

完成后会出现ComTest和ComTestPs,不用管PS
image.png

4 添加ATL简单对象

image.png
设置短名称为Temp 其他的会自动填充
ProgID 设置为 项目名+“.”+短名称 (ComTest.Temp )
image.png
ProgID 是之后 vbs 及其他语言 调用组件所需要提供的名称
接口 ITemp 为之后配置 idl 所需要找到的接口名
完成后会在ComTest 下自动添加 Temp.h 以及 Temp.cpp以及生成一个CTemp类
image.png

5 在CTemp类中创建自己的方法

在Temp.h添加函数声明
image.png
在Temp.cpp中实现此函数
image.png
__result 必须为指针用来进行返回
return 默认为 S_OK表示执行成功

6 打开ComTest.idl

idl 与 odl的区别

  • idl (接口描述语言), odl (对象描述语言)
  • idl是ATL中的, odl是ActiveX中的, ODL是Microsoft对IDL的扩展
  • 使用IDL时,必须在库声明之外声明将生成C ++源文件的接口。对于ODL,此步骤不是必需的。

  • 除了一些小的语言差异外,IDL和ODL在语法和组织方面都相同。

image.png
在interface ITemp : IDispatch里面写入
image.png
[in] 表示 输入[out] 表示输出 [retval] 表示作为返回值给外界, retval 必须只能有一个 而且必须跟在out 后面

7 生成

在Release x86下重新生成解决方案
image.png
先把此COM组件注册到系统
image.png

8 py下测试

image.png