|
//-----------------------------------------------------------------------------
// Desc: 创建框架, 仅仅是分配内存和初始化,还没有对其成员赋予合适的值
//-----------------------------------------------------------------------------
HRESULT CAllocateHierarchy::CreateFrame(LPCSTR Name, LPD3DXFRAME *ppNewFrame)
{
HRESULT hr = S_OK;
D3DXFRAME_DERIVED *pFrame;
*ppNewFrame = NULL;
pFrame = new D3DXFRAME_DERIVED; //创建框架结构对象
if (pFrame == NULL)
{
return E_OUTOFMEMORY;
}
//为框架指定名称
hr = AllocateName(Name, (LPSTR*)&pFrame->Name);
if (FAILED(hr))
{
delete pFrame;
return hr;
}
//初始化D3DXFRAME_DERIVED结构其它成员变量
D3DXMatrixIdentity(&pFrame->TransformationMatrix);
D3DXMatrixIdentity(&pFrame->CombinedTransformationMatrix);
pFrame->pMeshContainer = NULL;
pFrame->pFrameSibling = NULL;
pFrame->pFrameFirstChild = NULL;
*ppNewFrame = pFrame;
pFrame = NULL;
return hr;
}
ppNewFrame这个参数在传入时不加前面的*直接使用LPD3DXFRAME ppNewFrame这个形式在函数里面直接用ppNewFrame引用可以吗?为什么?
HRESULT CAllocateHierarchy::AllocateName( LPCSTR Name, LPSTR *pNewName )
{
UINT cbLength;
if( Name != NULL )
{
cbLength = (UINT)strlen(Name) + 1;
*pNewName = new CHAR[cbLength];
if (*pNewName == NULL)
return E_OUTOFMEMORY;
memcpy( *pNewName, Name, cbLength*sizeof(CHAR) );
}
else
{
*pNewName = NULL;
}
return S_OK;
}
这个也类似,pNewName这个参数。为什么传入时要在前面加个*?这两个参数本身就是指针,为什么一定要在传入时加个*然后在函数里再用*,这样做的必要性是什么?
|
|