2010-06-12 99 views
2

MIDL方法声明中是否没有常量引用?MIDL(常量)参考文献

例如。

[id(1), helpstring("My Method")] 
HRESULT MyMethod(
    [in] IID & const rclsid 
); 

HRESULT MyMethod(
    IID const &rclsid 
); 
+0

d3d11.idl使用REFGUID:/我不知道该如何看待这个 做o〜o 相当不错我猜是因为它的工作原理;问题仍然存在,因为我不明白如何REFGUID甚至可能,如果你不能,但我似乎无法找到一个例子...... – 2010-06-12 09:03:49

+0

保罗改变了什么?我使用的是一个而不是一个?我有时候那样做... – 2010-06-12 18:14:29

回答

3

MIDL真的不支持参考的参数,它仅支持 “in” 和 “出” 的参数。所以如果你传入一个引用,它只是一个指向该值的语法糖(问题是可观察性 - 如果在我们的方法签名中有一个回调函数或接口,则从回调中可以看到对引用的更改,但改变一个[out]参数是不可见的,直到函数返回。

此外,“&常量”和“常量&”丢失之间的差别。如果你看一下REFGUID的定义,你会看到他们只用一种形式的“常量”的C++代码:

#ifdef __midl_proxy 
#define __MIDL_CONST 
#else 
#define __MIDL_CONST const 
#endif 

#ifndef _REFGUID_DEFINED 
#define _REFGUID_DEFINED 
#ifdef __cplusplus 
#define REFGUID const GUID & 
#else 
#define REFGUID const GUID * __MIDL_CONST 
#endif 
#endif