#define THIS_的含义

时间:2017-06-09 05:14:36

标签: mesh d3dx

例如,有一个名为CreateFrame的函数,如

virtual STDMETHODIMP CreateFrame(THIS_ LPCSTR Name, 
LPD3DXFRAME*ppNewFrame);

我认为STDMETHODIMP意味着它将返回HResult和stdcall函数, 但是我不知道这在论证中是什么。

THIS_在combaseapi.h中定义如下。

  #define PURE                    = 0
  #define THIS_
  #define THIS                    void

有关详情,请参阅功能' CreateFrame'自动调用时 调用D3DXLoadMeshHierarchyFromX。

1 个答案:

答案 0 :(得分:0)

这些只是老式的COM宏。不要担心它们,特别是因为您正在查看13年以上的旧版Direct3D 9已弃用的D3DX标头...

virtual STDMETHODIMP Func(THIS);

这是一个带有 ONE 参数的函数:隐式this指针,返回HRESULT,并注释正确的COM调用约定__stdcall

virtual STDMETHODIMP Func(THIS_ LPCSTR Name, LPD3DXFRAME*ppNewFrame);

这是一个带 THREE 参数的函数:隐式this指针,指向字符串的指针和指向特定对象的指针,返回HRESULT ,并注释适当的COM调用约定。

要声明一个返回HRESULT以外的类型的函数,您将使用STDMETHOD_

virtual STDMETHOD_(ULONG, Func) (THIS_ LPCSTR Name, LPD3DXFRAME*ppNewFrame);

这些旧标头通常也支持使用C而不是C ++,其中this不是隐含的。传统D3DX从不打扰C调用路径,但许多旧的系统头确实使用它们。事实上,如果您在combaseapi.h中稍微进一步,您会看到C语言部分将THIS_THIS定义为:

#define PURE
#define THIS_                   INTERFACE FAR* This,
#define THIS                    INTERFACE FAR* This

更现代的MIDL编译器生成的代码稍微容易混淆:

virtual HRESULT STDMETHODCALLTYPE Func(void);

virtual void STDMETHODCALLTYPE Func(UINT value, LPCWSTR name);