Помните, что параметры C ++, такие как ID2D1Bitmap* bitmap1
, передаются по значению . Это означает, что у вас есть две совершенно разные (и почти не связанные) переменные bmp1
и bitmap1
. Единственное отношение, которое имеют две переменные, состоит в том, что bitmap1
начинает жизнь с того же значения, которое bmp1
имело при вызове decode
, то есть NULL
.
Ваши decode
логические вызовы CreateBitmapFromWicBitmap
передавая адреса bitmap1
и CreateBitmapFromWicBitmap
, тщательно заполняет bitmap1
адресом вновь созданного растрового изображения. Но , который никак не влияет на bmp1
. Таким образом, bmp1
остается равным нулю. Вы можете проверить это самостоятельно, установив точку останова на return hr
, а затем посмотрев содержимое bmp1
и bitmap1
.
Если вы хотите, чтобы Decode изменил содержимое bmp1
, вам нужнопередать адрес от bmp1
до decode
, а не содержимое. Это означает, что bitmap1 должен иметь тип ID2D1Bitmap **
, а декодирование должно называться следующим образом ... rl->decode(L"Menu_corner.png", &bmp1);
Обновление
В нескольких комментариях отмечалось, что я был довольно небрежнымговоря «параметры C ++ передаются по значению», я перефразировал текст выше, чтобы сделать его более сфокусированным.
В комментариях также указывается, что эти параметры C ++ можно передавать как по ссылке, так и по значению. В случае функции decode
с использованием синтаксиса ID2D1Bitmap*& bitmap1
.
Я должен признаться, что я несколько амбивалентен относительно относительных достоинств ID2D1Bitmap** bitmap1
и ID2D1Bitmap*& bitmap1
. Но это может сказать больше о моих личных предубеждениях, чем о чем-либо еще.