NewObject関数を使用すると例外が出る

ありがとうございます。例外が出ないことを確認できました。

こんにちは

TextureRenderTarget2Dからcv::Matへの変換をする関数を作っています。
いろいろ調べた結果、TextureRenderTarget2D::ConstructTexture2D関数を使用する必要がありでした。
ConstructTexture2Dの第一引数はUObject*型の値であり、基本的にはthisを渡すらしいです。
しかし私が作っている関数はメンバ関数内ではなく、普通(?)の関数なので、thisを渡すことはできません。

そこで、UObjectを一時的に作り引数に渡そうと考えました。
UObject
を作る関数として NewObject関数 がありました。
しかし、実際にNewObjectを呼び出すと例外がスローされてしまいます。

なにか例外がスローされない方法はないでしょうか?

こんにちは。

TextureRenderTarget2D.cpp内のConstructTexture2Dの実装を見てみると、内部でNewObjectをしており、それにInOuterが使われているようです。NewObjectのOuterにはデフォルト引数があり、その記述を真似するのが最も簡単な方法かと思います。つまり、

rt2d->ConstructTexture2D((UObject*)GetTransientPackage(),
                          FString(TEXT("MatTex")), RF_NoFlags);

これで例外が出ないことを確認しました。

または、BlueprintFunctionLibraryを用いたstatic関数として実装しているなら、world context objectを引数にとり、それをInOuterとして与えるのもよいかもしれません。次のように宣言すれば、worldContextObject_はBP上でピンが隠蔽されます(個人的にはこちらの方が好きです)。

UFUNCTION(BlueprintCallable, Category = WrappedOpenCV, meta = (HidePin = "worldContextObject_", DefaultToSelf = "worldContextObject_"))
static void ConvertMat(UObject* worldContextObject_, class UTextureRenderTarget2D* rt2d);