这是我的功能:
void CreateRenderTarget(HWND, ID2D1HwndRenderTarget*);
它的工作原理如下:
void D2DRes::CreateRenderTarget(HWND hwnd, ID2D1HwndRenderTarget* pRT)
{
RECT rc;
GetClientRect(hwnd,&rc);
pFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hwnd,
D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top)),
&pRT);
}
它被称为:
pD2DRes->CreateRenderTarget(map.GetHWnd(),map.GetpRT());
从CreateRenderTarget()返回后,map.pRT为NULL。怎么来的?
编辑:有我的GetpRT()函数:
ID2D1HwndRenderTarget* MapEditor::GetpRT()
{
return pRT;
}
答案 0 :(得分:2)
第一个问题:
从
CreateRenderTarget()
返回后,map.pRT
为NULL
。怎么来的?
因为您没有通过引用传递指针 。为了通过引用传递它,CreateRenderTarget()
的签名应该是:
void CreateRenderTarget(HWND, ID2D1HwndRenderTarget*&);
// ^
除非你这样做,否则你的CreateRenderTarget()
将处理作为参数传递的指针的副本,并且更改其值不会影响原始指针。
第二个问题:
你写道:
[...]我的
GetpRT()
功能:ID2D1HwndRenderTarget* MapEditor::GetpRT() { return pRT; }
注意,GetpRT
还应该将引用返回到内部pRT
指针,否则上述更改将不起作用(您将通过引用传递原始pRT
的副本。
因此,您应该相应地修改其签名:
ID2D1HwndRenderTarget*& MapEditor::GetpRT()
// ^
{
return pRT;
}
答案 1 :(得分:0)
这是一个非常奇怪的代码。您按值传递所有内容,并希望修改函数中的值。
如果您计划修改传递给函数的指针,原型应如下所示:
void CreateRenderTarget(HWND,ID2D1HwndRenderTarget *& pRT);