例如,有一个名为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。
答案 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);