1.定义预处理命令_ATL_ATTRIBUTES

2.在一个全局的Cpp文件里面配置module的attribute

[module(dll, uuid = "{3845951F-15B8-4286-8E7D-E9D4F5C7B6CE}", name = "TestApp")]

3.定义接口

[object,uuid("9F414A8A-1D5E-4aff-A60E-CFD65155ABB6"),dual, helpstring("IGFCursorMgr Interface"),pointer_default(unique)
]
__interface IEmployee : IDispatch
{HRESULT DoWork(BSTR bstrTask);
};[coclass,default(IEmployee),threading(free),vi_progid("TXGF.CGFCoCursorMgr"),progid("TXGF.CGFCoCursorMgr.1"),version(1.0),uuid("20BB9542-E499-4618-9E2D-079A06FD99B1"),helpstring("CGFCoCursorMgr Class")
]
class ATL_NO_VTABLE CManager:public IEmployee
{
public:CManager(){//InternalAddRef();}DECLARE_PROTECT_FINAL_CONSTRUCT()HRESULT FinalConstruct(){return S_OK;}void FinalRelease(){}HRESULT DoWork(BSTR bstrTask){CComObject<CManager> * pObj = NULL;CComObject<CManager>::CreateInstance(&pObj);return S_OK;}
};

4.引用ATL命名空间

如遇编译错误error C3358: 'IDispatchImpl': symbol not found

需要添加ATL的命名空间using namespace ATL;

关于使用的参考资料:http://msdn.microsoft.com/en-us/magazine/cc301337.aspx

The generated code in Figure 6 shows that the [coclass] attribute makes the compiler derive a class from CComObjectRootEx<> and this provides QueryInterface through the interface map. The compiler generates this map by looking at the interfaces that the class is derived from. If you want to add your own entries to this map, you can use the [com_interface_entry()] attribute. The parameter to this attribute is the COM_INTERFACE_ENTRY macro that you want to add to the top of the map. For example:

转载于:https://www.cnblogs.com/Clingingboy/p/3407293.html

VC++ 使用attributes定义接口相关推荐

  1. Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)

    1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...

  2. Spring Boot 定义接口的方法是否可以声明为 private?

    我们在 Controller 中定义接口的时候,一般都是像下面这样: @GetMapping("/01") public String hello(Map<String,Ob ...

  3. Java定义接口变量为接收类型有什么好处(面向接口编程)

    个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性. 面向接口编程: 一种规范约束 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者 ...

  4. CLR via C#学习笔记-第十三章-定义接口、继承接口

    13.1 类和接口继承 接口是为了实现多继承 所有的类都继承了System.Object,及其四个公共实例方法:ToString.Equals.GetHashCode.GetType. CLR允许定义 ...

  5. java定义接口_一文知道Java中接口的定义

    使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: 方法:接口中的方法只有定义而没有被实现. ...

  6. Java语言用于定义接口的关键字是_定义类的保留字是(__)定义接口的保留字是(__);...

    [单选题]为了使包sos在当前程序中可见,可以使用的语句是( ) [单选题]方法的作用不包含:( ) [判断题]水平方向布置的三相平行导体在发生三相短路时 , 最大电动力出现在 A 相. ( ) [单 ...

  7. (1)定义接口A,里面包含值为3.14的常量PI和抽象方法double area()。 (2)定义接口B,里面包含抽象方法void setColor(String c)。

    代码 /*第一题:(1)定义接口A,里面包含值为3.14的常量PI和抽象方法double area().(2)定义接口B,里面包含抽象方法void setColor(String c).(3)定义接口 ...

  8. struts2 在拦截器进行注入(依据Action是否实现自己定义接口)

    比如:经常在Action中都须要获取当前登录的User,就须要获取Session.然后从Session获取当前登录的User,由于这些步骤都是反复操作,能够想办法在拦截器中进行实现.能够自己定义一个接 ...

  9. 什么是接口?如何定义接口?如何实现接口?

    在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 如用关键字interface,你可以从类的实现中抽象一个 ...

最新文章

  1. 拼多多面试|如何用 Redis 统计独立用户访问量?
  2. 图解排序算法之3种简单排序(选择,冒泡,直接插入)
  3. Outlook数据提取工具readpst
  4. Hibernate CRUD操作
  5. boost::mp11::mp_set_push_front相关用法的测试程序
  6. Python GUI界面编程初步 04 - Tkinter设计框架和概念
  7. 印花材料使用过程中的三个常见问题及解决方案
  8. 【统计学】10个必知必会的统计学问题 (附答案)
  9. jQuery API/1.1.1/CSS
  10. 人人商城生成app教程_人人商城打包app教程 方法 hbuilder打包支持支付宝微信原生支付...
  11. 通达信接口程序怎么设计出K线图?
  12. linux解压war包命令改配置文件脚本,自动解压war包,并替换胚子和文件,重启tomcat,实现自动化部署。...
  13. 当你不能够再拥有,你唯一可以做的,就是令自己不要忘记
  14. 如何在 vscode 中更换炫酷的背景图
  15. 自制网页(仿B站)前端开源程序
  16. 黑龙江省扶贫电商平台“小康龙江”上线 传输绿色优质农产品
  17. 常用非线性优化算法总结
  18. css图片如何垂直水平居中设置
  19. swift 调用震动
  20. 安卓开发培训!没想到一个Handler还有中高级几种问法,看这一篇就够了!

热门文章

  1. 『数据库』朴实无华的数据库多表查询,连接查询、笛卡尔积
  2. Leetcode 3:无重复字符的最长子串
  3. 网络流--最大流--Dinic模板矩阵版(当前弧优化+非当前弧优化)
  4. 消息摘要的编程使用(MD5、SHA、HMAC)
  5. Linux16.04安装Matlab2016b详细教程
  6. sockaddr_in中sin_zero的意义,以及sockaddr_in sockaddr in_addr区别联系
  7. 梯度下降优化方法'原理_优化梯度下降的新方法
  8. 贷款被拒,因为你的征信黑洞太多
  9. 北京某打工子弟学校之三
  10. C++11 Lambda函数(匿名函数)