在ATL接口中添加自定义函数

         一般而言,我们会在dll接口,即使想要在内部实现某些更小模块也只消在继承该机口的类中添加功能函数,但是仅仅这样,该功能函数是不能暴露给外部使用的,其作用域只在类的内部,所以怎样才能给接口添加自定义函数,同时暴露出来呢?

       这就要说到idl了,即interface description language,接口描述语言。

     

[
	object,
	uuid(D01D924C-FCFC-4309-A1AB-180E4A22324F),//IID_hInstance
	dual,
	nonextensible,
	pointer_default(unique)
]
interface IhInstance : IDispatch{//表示他是一个自动化接口
	 HRESULT Msg(DWORD bg);
	 HRESULT Msg2(DWORD* know);
	 HRESULT PrintMsgW([unique][string][in]const wchar_t*);
	 
	
};
[
	uuid(70F0571D-85B7-4E7F-BE65-626DE932A3DB),//LIBD_customLib
	version(1.0),
]
library customLib
{
	importlib("stdole2.tlb");//引入其他类型库信息
	[
		uuid(0AED49B0-D7EA-4D87-90EF-9F404103A5F8)	//CLSID_hInstance	
	]
	coclass hInstance//对象类型信息
	{
		[default] interface IhInstance;//指定缺省接口如果还有其他接口 则,没有[default]
	};
};
其中关键字"library"表示一个类型库,被其前面[]中的内容修饰,有一个GUID ,version和helpstring()/*可选*/

在coclass hInstance的{};中包含了该类型库支持的接口名称列表。

下面说下接口的信息,我们可以这样认为[]中的内容主要是为了修饰其后方的方法或者属性

例如为一个接口声明一个方法的话

[propget,helpstring("帮助说明符")]//这是修饰说明符propget,说明了该方法是要获得该接口的指定的属性值而propput修饰符,则是为了重新设置接口的属性值

其实我最想说的是在接口方法中对于参数的修饰符的说明

[in]输入参数

[out]输出参数

[unique]只有在参数为指针类型的时候才有用,即,允许指针类型的参数的实参值为NULL

[ref]该类型的指针参数必须为non-null,同时在函数执行过程中不能被改变,同时所有[out]类型的参数默认也被[ref]修饰

[ptr]和[unique]类似,但是可以使用别名

对于IDL支持的数据类型,一般都还行吧,笔者遇到的只有一个麻烦就是我想声明的是:

HRESULT PrintMsgA([unique][in]const char*);但是总出现不能实例化抽象基类的问题,最终通过修改变成了

HRESULT PrintMsgA([unique][in]const byte*);就通过了,虽然至今不知为什么,但也算是一个解决方案了

有朋友遇到的话可以试一下



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值