2010-06-12 97 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