LoginSignup
0

UnrealEngineでaws-sdk-cppを利用する

Last updated at Posted at 2022-10-11

以下の記事で作ったプラグインのaws-sdk-cppを更新しようとしていろいろはまったので内容をメモしておきます。

環境

UE4.27.2
aws-sdk-cpp 1.9.353

導入方法

以下に導入手順があるのでそれに従います。

導入ではまったところ

上記の文書を見ずに最初にaws-sdk-cppのコードをgithubから取得してビルドして利用しようとすると
AWS_DEEP_CHECKSやAWS_USE_IO_COMPLETION_PORTSなどが定義されていないというエラーでUnrelEngine側のビルドでエラーになりました。
上記の文書にあるとおり[プロジェクト名].Build.csにbEnableUndefinedIdentifierWarnings = false;を追加することで回避できました。

利用ではまったところ

S3のGeneratePresignedUrl利用個所でのクラッシュ

Aws::Stringを反すGeneratePresignedUrl関数の利用個所でエディタプレイでクラッシュするという現象が発生しました。
クラッシュではaccess violationが発生しており文字列のメモリ解放部分で起きているようでした。

おそらくメモリ管理方法がUnrealEngine側とSDKのdll側で異なりdll内で確保したAws::StringのメモリをUnrealEngine側で解放するする際に解放メモリのサイズの食い違いが起きたのではないかと思います。
力技でGeneratePresignedUrlの返り値をconst char*にした関数をaws-sdk-cppに用意してビルド、利用するとクラッシュは発生しなくなりました。
本来は以下にあるようにaws-sdkのメモリ管理方法をUnrealEngineにあわせる必要があるのではないかと思います。

2023/09/14追記:UnrealEngineでaws-sdk-cppのメモリ管理をUnrealEngineと合わせる - Qiitaを書きました。

S3のPutObjectが遅い環境がある

PutObjectでアップロードが遅い環境がありました。
一般的なWebでのSpeedTestでは問題なさそうでバージョンが古いaws-sdkなら速かったです。
原因はまだよくわかっていません。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0