我有一段代碼,使用Microsoft-specific extension到C++:__declspec(uuid(「ComObjectGUID」))擴展到了什麼地方?
interface __declspec(uuid("F614FB00-6702-11d4-B0B7-0050BABFC904"))
ICalculator : public IUnknown
{
//...
};
這句話是什麼擴大到?我如何用ANSI C++重寫它?
我有一段代碼,使用Microsoft-specific extension到C++:__declspec(uuid(「ComObjectGUID」))擴展到了什麼地方?
interface __declspec(uuid("F614FB00-6702-11d4-B0B7-0050BABFC904"))
ICalculator : public IUnknown
{
//...
};
這句話是什麼擴大到?我如何用ANSI C++重寫它?
如果您需要靜態「附加」guid到界面,您還可以使用模板(特徵)。試想一下:
在公共H-文件創建一個空的非專業化的模板:
template<typename TInterface> struct TInterfaceTraits {}
在定義接口,爲它編寫一個模板特(或者你可以在其他任何地方,包括之前把它寫使用):
class ICalculator : public IUnknown
{
//...
};
template<> struct TInterfaceTraits<class ICalculator > {
static GUID guid() {
return IID_ICalculator ;
}
};
然後得到它的UUID,你可以寫類似:
ICalculator *pCalcFace;
pObject->QueryInterface(TInterfaceTraits<ICalculator>::guid(), (void**)pCalcFace);
原因你可以寫(我把它留給你)模板包裝器的QueryInterface,它將使用特徵來自動提供正確的GUID,這將是更容易使用,即
ICalculator *pCalcFace = QueryInterface<ICalculator>(pObject);
@Mat:更像是,它是''struct'的'define'。 – Xeo 2011-06-02 20:33:10
@Mat:那是'__interface'(注意下劃線),IUnknown頭文件中還有'#define interface struct'。 – Xeo 2011-06-02 20:41:05
@Xeo,我填寫像@Mat剛退休:) – ezpresso 2011-06-02 20:48:49