UE5 EA Visual Studio 2019 ~静的ライブラリ(.lib)を作成してUEで使用する~
Visual Studio 2019から「プリコンパイル済みヘッダーの構成」に変更がありました。
UE5 EAでも問題なく静的ライブラリの関数を呼び出すことが出来たので手順をまとめました。次は動的ライブラリ(.dll)の方も確認します。
Visual Studio 2019で静的ライブラリ(.lib)を作成する
Visual Studio 2019でプロジェクトを作成する
Visual Studio 2019で静的ライブラリ(.lib)を作成するプロジェクトを作成していきます。
静的ライブラリ(Static Library)を作成するテンプレートを選択します。
Project NameとLocationを設定します。
今回はProject Nameを[StaticLibTest]に設定します。
ヘッダーファイルとC++ファイルを追加します。
LibTest.h
#pragma once
#ifdef __cplusplus
extern "C"
#endif
int TestAdd(int A, int B);
#include "LibTest.h"
int TestAdd(int A, int B)
{
return A + B;
}
この状態で一度Buildを行います。
プリコンパイル済みヘッダーのエラーを修正する
「#include "pch.h"を追加しますか?」という内容のエラーが表示されます。
プリコンパイル済みヘッダーを使用しないようにして直す設定もあります。
LibTest.cppに#include "pch.h"を追加して再ビルドするとエラーが無くなります。
#include "pch.h"
#include "LibTest.h"
int TestAdd(int A, int B)
{
return A + B;
}
2017と2019でプリコンパイル済みヘッダーの構成が変更になったそうです。
【VS 6.0~VS 2017】
stadafx.cpp
|
+ stdafx.h
【VS 2019】
pch.cpp
|
+ pch.h
| |
| + framework.h
【参考URL:プリコンパイル済みのヘッダーファイルについて】
Buildの構成をRelease(x64)に変更してビルドする
構成をRelease(x64)に変更します。
Configuration Managerを開きます。
Active solution configuration:Release
Active solution platform:x64
再びBuildを行います。
ビルドすることが出来ました。
「(プロジェクトフォルダ)/x64/StaticLibTest.lib」が作成されます。
UE5 EAで静的ライブラリを使用する
テスト用のC++プロジェクトを作成する
UE5 EAで静的ライブラリを使用する準備をします。
BlankのC++プロジェクトを作成します。
静的ライブラリとヘッダーファイルをプロジェクトに追加する
「StaticLibTest.lib」とヘッダーファイル「LibTest.h」を以下の構成になるように配置します。(足りないフォルダは作成してください。)
(Projectフォルダ)
└ Source/
└ (Project名)/
├ Library/
| ├ header/
| | └ LibTest.h
| └ lib/
| └ StaticLibTest.lib
├ Private
|
「(UE5 EAプロジェクト名).Build.cs」を開きます。
Build.csファイルに以下の修正を行います。
・ヘッダーファイルのIncludePathを追加
・静的ライブラリを追加する(プラットフォームがWin64)
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class CPP_LibraryTest : ModuleRules
{
public CPP_LibraryTest(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
PrivateDependencyModuleNames.AddRange(new string[] { });
PublicIncludePaths.Add(ModuleDirectory + "/library/header");
if(Target.Platform == UnrealTargetPlatform.Win64)
{
PublicAdditionalLibraries.Add(ModuleDirectory + "/library/lib/StaticLibTest.lib");
}
}
}
IncludePathを追加して、LibTest.hを参照できるようにしています。
PublicIncludePaths.Add(ModuleDirectory + "/library/header");
プラットフォームがWin64の時に「StaticLibTest.lib」をライブラリとして追加します。
if(Target.Platform == UnrealTargetPlatform.Win64)
{
PublicAdditionalLibraries.Add(ModuleDirectory + "/library/lib/StaticLibTest.lib");
}
Build.csに関する公式ドキュメントはコチラになります。
静的ライブラリ(.lib)とヘッダーファイルの配置、Build.csの修正が出来たら、Visual Studio projectを更新します。
静的ライブラリ(.lib)とヘッダーファイルがプロジェクトに追加されました。
静的ライブラリの関数「TestAdd」を呼び出すActorクラスを作成する
静的ライブラリを呼び出すテストを行うためのActorクラスを追加します。
親クラスにActorを選択します。
名前をCallLibFuncActor(Private)に設定します。
追加したソースコードを修正します。
CallLibFuncActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CallLibFuncActor.generated.h"
UCLASS()
class ACallLibFuncActor : public AActor
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category="Call Lib Test")
int CallTestAdd(const int A, const int B);
};
#include "CallLibFuncActor.h"
#include "LibTest.h"
int ACallLibFuncActor::CallTestAdd(const int A, const int B)
{
// 静的ライブラリ(StaticLibTest.lib)から関数[TestAdd]を呼び出す
return TestAdd(A, B);
}
ブループリントでCallTestAddを呼び出すことで、静的ライブラリ(StaticLibTest.lib)から関数[TestAdd]を呼び出すことが出来る準備が整いました。
AとBの足し算の結果が返ってきたら無事呼び出せたことが確認できます。
int TestAdd(int A, int B)
{
return A + B;
}
ビューポートにActorを追加して静的ライブラリの関数を呼び出す
CallTestAddを呼び出して、結果をPrintStringで出力する処理を書いていきます。ビューポートに「CallLibFuncActor」を追加します。
レベルブループリントを開きます。
BeginPlay時に関数「CallTestAdd」を呼び出して、PrintStringで出力する処理を実装します。
プレイした時に[11](5+6)の結果が出力されているので、静的ライブラリの関数を呼び出すことが出来ました。
まとめ
UE5になることでC++が劇的に変わるということは今のところないです。
UE5に関連する開発ツール(Visual Studio)の方が変わっていることの方が躓くポイントになっています。特に導入部分のエラーがなんで起きてしまうのか調べるところに時間がかかります。
少しずつですが、躓くポイントの解決しながら進めることでC++を書くことに集中できるようになってきました。
作業をするソフトの更新は追っていけるような工夫をした方がよさそうですね。
この記事が気に入ったらサポートをしてみませんか?