私のシナリオは次のとおりです。
呼び出し元関数::
IDirect3DSurface9 * surf = null;
Func(&surf);
hr = surf->LockRect(, , ); // THROWS an EXCEPTION BCOZ "surf" is still null. Dont know why ??
CALLED 関数では:
Func(IDirect3DSurface9 **surfReceive)
{
surfReceive= new IDirect3DSurface9*[10];
IDirect3DSurface9* surfcreate = NULL;
hr = xyz->CreateOffscreenPlainSurface( width,
height,
formt,
D3DPOOL_DEFAULT,
&surfcreate,
NULL);
if (FAILED(hr))
return hr;
surfReceive[0] = surfcreate;
}
私の疑問は、(上記のコードで示したように) CALLER では、呼び出し元が戻った後でも surf がまだ null であるということです。そして、以下のようにサーフで LockRect() を呼び出すと例外がスローされます。
hr = surf->LockRect(, , );
「CreateOffscreenPlainSurface()」呼び出しが成功を返し、「surfcreate」が正しい値を格納するため、surfReceive[0] も正しい値を格納することに注意することが重要です。しかし、CALLERでこれにアクセスする方法を間違えていると思います。