티스토리 뷰

이번 시간에는 Unreal의 Blueprint를 이용해 직접 만든 DLL(Dynamic Link Library)을 사용하는 방법을 알아보겠습니다.

 

사용 예시

먼저 결과는 다음과 같습니다.

DLL을 이용해 함수 호출
DLL을 이용해 함수 호출

위 블루프린트에 보이는 Add Func 노드Add Struct Func 노드는 DLL에서 불러온 함수를 호출하는 코드가 정의되어 있습니다. 함수의 결과로 리턴하는 값도 DLL에서 불러온 함수가 리턴한 값입니다.

 

Blueprint를 이용해 직접 만든 DLL을 사용하려면 다음과 같은 과정을 거쳐야 합니다.

1. DLL 파일을 빌드하는 프로젝트 만들기

2. DLL 파일을 읽는 로직이 들어간 소스 코드 작성

3. Blueprint를 이용해 정의한 함수 호출

 

자세한 내용은 순서대로 설명하겠습니다.

 

1. DLL 파일을 빌드하는 프로젝트 만들기

가장 먼저 할 일은 DLL 파일을 만드는 일입니다. 기존에 DLL을 만드는 방식과 별반 다를 것이 없습니다. 

Visual Studio를 이용해 Project를 만들 때 아래 이미지처럼 DLL 형식으로 만들면 됩니다.

Visual Studio 2017 새 프로젝트

*Visual Studio 2017을 기준으로 작성한 글이라 다른 버전의 Visual Studio는 다를 수 있습니다. 이미 프로젝트를 만든 이후에도 프로젝트 마우스 오른쪽 클릭 -> 속성 -> 구성 속성 -> 일반에서 설정할 수 있는 듯합니다.

 

프로젝트를 만든 이후에는 아래와 같은 CPP 파일 하나만 있으면 가능합니다.

두 개의 int 값을 받아 더해서 리턴하는 AddFunc 함수와 두 개의 Obj 타입 Struct를 받아 각 data를 더해서 리턴하는 AddStructFunc 함수를 만들었습니다.

 

이제 프로젝트를 빌드하면 설정에 따라 "솔루션 폴더\x64 혹은 x86\Release 혹은 Debug" 폴더에 ProjectName.dll 파일이 생성된 것을 확인할 수 있습니다. 

이제 이 파일을 Unreal 프로젝트에서 읽을 수 있도록 하면 됩니다.

 

2. DLL 파일을 읽는 로직이 들어간 소스 코드 작성

다음으로 할 일은 Unreal에서 DLL 파일을 읽는 소스 코드를 작성하는 것입니다.

먼저 Unreal에서 C++ 클래스를 만들어야 합니다.

부모 클래스로는 아래 이미지처럼 BlueprintFunctionLibrary를 선택합니다.

부모 C++ 클래스 선택

클래스가 만들어지고 나면 header 파일을 아래와 같이 수정합니다.

header 파일

UFUNCTION에 BlueprintCallable Specifier를 주어 Blueprint에서 호출할 수 있도록 합니다.

해당 함수들은 따로 객체를 만들어서 호출할 필요가 없으므로 static으로 정의합니다.

AddFunc 함수와 AddStructFunc 함수는 내부에서 DLL 함수를 호출할 것입니다.

cpp 파일 전역변수

.cpp 파일에서는 DLL 함수를 가리키게 할 함수 포인터 변수를 정의합니다.

ImportFuncs 함수에서 함수 포인터 값을 셋팅할 것이고 AddFunc, AddStructFunc 함수에서 함수 포인터를 이용해 DLL 함수를 호출할 것입니다.

DLL 파일을 로드하는 함수입니다.

FPaths::GamePluginsDir() 함수는 "Unreal Engine Project File이 있는 폴더\Plugins\" 을 리턴합니다.

기본적으로 Plugins 폴더는 만들어지지 않기 때문에 Plugins 폴더를 만들어야 합니다.

foldername 값은 Blueprint를 이용해 셋팅하면 됩니다.

DLL의 함수들을 함수 포인터 전역 변수로 셋팅하는 함수입니다.

GetDllExport 함수가 void* 타입을 리턴하므로 알맞는 함수 포인터 형식으로 맞춰줍니다.

나머지 함수들은 위와 같이 정의하면 됩니다.

마지막으로 .cpp 파일을 저장한 후 Unreal 에디터로 돌아가 Compile 합니다.

 

3. Blueprint를 이용해 정의한 함수 호출

마지막으로 Blueprint를 이용해 위에서 정의했던 함수들을 호출해야 합니다.

함수를 제대로 호출할 수 있는 지 확인하기 위해 새로운 Blueprint Class를 만듭니다.

레벨에 배치할 것이므로 Actor Class를 부모 클래스로 만듭니다.

Class를 만든 이후에는 더블 클릭하여 Blueprint Editor를 엽니다.

노드를 위와 같이 배치합니다. 

dll 파일이 "Unreal Engine Project File이 있는 폴더\Plugins\Dlls\DllExportProject.dll" 경로에 있을 경우 ImportDLL 함수의 Folder 변수와 Name 변수를 위 이미지와 같이 셋팅하면 됩니다.

 

나머지 노드들을 배치한 후에는 해당 Actor를 레벨에 배치하면 됩니다.

그 후 마지막으로 Unreal Editor를 이용해 실행하면 화면 좌상단에 String이 출력되는 것을 확인할 수 있습니다.

지금까지 Unreal Blueprint를 이용해서 직접 만든 DLL 함수를 호출하는 방법을 알아보았습니다.

다음 시간에도 Unreal과 관련된 포스팅으로 돌아오겠습니다.

 

참고 자료: https://wiki.unrealengine.com/Linking_Dlls

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함