我在另一个函数中转换的位图结构在函数返回后设置为NULL
功能:
HRESULT RessourcesLoader::decode(LPCWSTR name,ID2D1Bitmap* bitmap1) {
int hr = S_OK;
hr = LoadFile(name, bitmap1);
assert(SUCCEEDED(hr));
hr = rendertarget->CreateBitmapFromWicBitmap(wicConverter, NULL, &bitmap1);
assert(SUCCEEDED(hr));
return hr;
这里叫:
ID2D1Bitmap* bmp1=NULL;
ID2D1Bitmap* bmp2=NULL;
rl->decode(L"Menu_corner.png", bmp1);
rl->decode(L"Menu_side.png", bmp2);
((函数hr是S_OK且结构包含所有内容,一旦函数返回指针为NULL)这是范围问题吗?
请记住,C ++参数为passed by value。这意味着您有两个完全独立(且几乎不相关)的变量bmp1
和bitmap1
。这两个变量之间唯一的关系是bitmap1
以与bmp1
被调用时的decode
相同的值开始生命-即NULL
。
您的decode
逻辑调用CreateBitmapFromWicBitmap
,传入bitmap1
的地址,然后CreateBitmapFromWicBitmap
小心地用新创建的位图的地址填充bitmap1
。 但是完全不影响bmp1
。因此bmp1
仍设置为null。您可以通过在return hr
上放置一个断点,然后查看bmp1
和bitmap1
的内容来自己检查。
如果您希望解码更改bmp1
的内容,则需要将bmp1
的地址传递给decode
,而不是内容。这意味着bitmap1应该是ID2D1Bitmap **
类型,并且应该这样调用decode ... rl->decode(L"Menu_corner.png", &bmp1);
您正在将您的位图指针的copy