#define THIS_ 的含义
Meaning of #define THIS_
例如,有一个名为CreateFrame的函数,
virtual STDMETHODIMP CreateFrame(THIS_ LPCSTR Name,
LPD3DXFRAME*ppNewFrame);
我认为 STDMETHODIMP 意味着它将 return HResult 和 stdcall 函数,
但我不知道参数 menas 中的 THIS_ 是什么。
THIS_ 在 combaseapi.h 中这样定义。
#define PURE = 0
#define THIS_
#define THIS void
有关详细信息,函数 'CreateFrame ' 会在以下时间自动调用
D3DXLoadMeshHierarchyFromX 被调用。
那些只是 old-school COM 宏。不要担心它们,特别是因为您正在查看 13 多年前遗留 Direct3D 9 的已弃用的 D3DX header...
virtual STDMETHODIMP Func(THIS);
这是一个接受 ONE 参数的函数:隐含的 this
指针,returns 和 HRESULT
,并被注释为正确的COM 调用约定 __stdcall
.
virtual STDMETHODIMP Func(THIS_ LPCSTR Name, LPD3DXFRAME*ppNewFrame);
这是一个带有 三个 参数的函数:隐式 this
指针、指向字符串的指针和指向特定 object 的指针), returns 和 HRESULT
,并针对正确的 COM 调用约定进行了注释。
要声明一个 returns 不是 HRESULT
类型的函数,您需要使用 STDMETHOD_
:
virtual STDMETHOD_(ULONG, Func) (THIS_ LPCSTR Name, LPD3DXFRAME*ppNewFrame);
这些旧的 header 通常也支持从 C 而不是 C++ 使用,其中 this
不是隐含的。旧版 D3DX 从不使用 C call-paths,但许多旧系统 header 确实使用了它们。事实上,如果您在 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);
例如,有一个名为CreateFrame的函数,
virtual STDMETHODIMP CreateFrame(THIS_ LPCSTR Name,
LPD3DXFRAME*ppNewFrame);
我认为 STDMETHODIMP 意味着它将 return HResult 和 stdcall 函数, 但我不知道参数 menas 中的 THIS_ 是什么。
THIS_ 在 combaseapi.h 中这样定义。
#define PURE = 0
#define THIS_
#define THIS void
有关详细信息,函数 'CreateFrame ' 会在以下时间自动调用 D3DXLoadMeshHierarchyFromX 被调用。
那些只是 old-school COM 宏。不要担心它们,特别是因为您正在查看 13 多年前遗留 Direct3D 9 的已弃用的 D3DX header...
virtual STDMETHODIMP Func(THIS);
这是一个接受 ONE 参数的函数:隐含的 this
指针,returns 和 HRESULT
,并被注释为正确的COM 调用约定 __stdcall
.
virtual STDMETHODIMP Func(THIS_ LPCSTR Name, LPD3DXFRAME*ppNewFrame);
这是一个带有 三个 参数的函数:隐式 this
指针、指向字符串的指针和指向特定 object 的指针), returns 和 HRESULT
,并针对正确的 COM 调用约定进行了注释。
要声明一个 returns 不是 HRESULT
类型的函数,您需要使用 STDMETHOD_
:
virtual STDMETHOD_(ULONG, Func) (THIS_ LPCSTR Name, LPD3DXFRAME*ppNewFrame);
这些旧的 header 通常也支持从 C 而不是 C++ 使用,其中 this
不是隐含的。旧版 D3DX 从不使用 C call-paths,但许多旧系统 header 确实使用了它们。事实上,如果您在 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);