[COM]接口描述语言IDL

2024-05-10 00:38
文章标签 接口 com idl 描述语言

本文主要是介绍[COM]接口描述语言IDL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、首先要清楚一点,使用IDL只是定义COM接口的一种方法(用C++也可以定义)。

IDL是一种语言,Microsoft Visual C++提供了MIDL工具,可以将IDL文件编译成C/C++兼容的接口描述头文件(.h)。

如下是用IDL写的一个IcwElement接口

[plain]  view plain copy
  1. [  
  2.     object,  
  3.     uuid(0736591A-734E-4a3d-A1F0-150A50E402BB),  
  4.     helpstring("IcwElement Interface"),  
  5.     pointer_default(unique)  
  6. ]  
  7. interface IcwElement : IUnknown  
  8. {  
  9.     [propget, helpstring("属性 Type")] HRESULT Type([out, retval] BSTR * type);  
  10.     [propget, helpstring("property Visible")] HRESULT Visible([out, retval] VARIANT_BOOL* pVal);  
  11.     [propput, helpstring("property Visible")] HRESULT Visible([in] VARIANT_BOOL newVal);              
  12.     [propget, helpstring("属性 Modified")] HRESULT Modified([out, retval] VARIANT_BOOL* pVal);  
  13.     [propput, helpstring("属性 Modified")] HRESULT Modified([in] VARIANT_BOOL newVal);  
  14. };  
其中有一些关键字可以参考MSDN: http://msdn.microsoft.com/en-us/library/aa367088(v=vs.85).aspx

使用MIDL编译后得到相应的C/C++代码如下:

[cpp]  view plain copy
  1. EXTERN_C const IID IID_IcwElement;  
  2.   
  3. #if defined(__cplusplus) && !defined(CINTERFACE)  
  4.       
  5.     MIDL_INTERFACE("0736591A-734E-4a3d-A1F0-150A50E402BB")  
  6.     IcwElement : public IUnknown  
  7.     {  
  8.     public:  
  9.         virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Type(   
  10.             /* [retval][out] */ BSTR *type) = 0;  
  11.           
  12.         virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Visible(   
  13.             /* [retval][out] */ VARIANT_BOOL *pVal) = 0;  
  14.           
  15.         virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Visible(   
  16.             /* [in] */ VARIANT_BOOL newVal) = 0;  
  17.           
  18.         virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Modified(   
  19.             /* [retval][out] */ VARIANT_BOOL *pVal) = 0;  
  20.           
  21.         virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Modified(   
  22.             /* [in] */ VARIANT_BOOL newVal) = 0;  
  23.           
  24.     };  
  25.       
  26. #else   /* C style interface */  

可见,生成的是C++代码,定义了一个抽象类,并有五个函数。函数名,参数,返回值,以及这个接口的GUID都是根据IDL文件自动生成的。

并且注意,生成的IcwElement类中是没有成员变量的,而成员变量的定义放在实现此接口的类中。

二、IDL中的接口一经修改,则需要改几个地方。由于接口改了,自动生成的.h文件也被修改,而因为其成员函数被写成纯虚函数,因而实现(继承)此接口的具体类处也必须实现这些纯虚成员函数。幸好,VS提供了工具自动完成这一套,我们只需向IDL的接口中添加属性,实现此接口的类便自动添加了相应的方法(put和get),当然具体类的成员变量需要自己添加。

参考:

1. 《COM原理与应用》——潘爱民

2. MSDN

这篇关于[COM]接口描述语言IDL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974943

相关文章

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac