관리 메뉴

기억을 위한 기록들

UE4 에서 dll 파일 다루기 본문

UnrealEngine

UE4 에서 dll 파일 다루기

에드윈H 2020. 10. 20. 23:24

게임 프로젝트를 패키징한뒤 개발자의 입맛에 따라 필요한 정보를 게임실행 이외의 파일에 저장이 필요로 할때가 있다.

그게 바로 DLL 파일 (Dynamic Linked Library)이다. 

 

우리가 사용하는 게임이외에 프로그램에도 DLL파일 자체가 없으면 실행 불가능하거나, 문제가 생긴다. 이를 이제 언리얼프로젝트에서 호출하여 사용해보도록 하자.

 

 

우선 언리얼 프로젝트를 열기전에 비주얼 스튜디오를 열어 DLL 프로젝트를 생성해준다.

선택되어있는데 프로젝트로 만들어주게 되면

 

 

위와같이 기본형태가 나오는데 헤더파일제외는 지워도 무방하다.

 

그리고 이제 필요로하는 함수를 사용해준다.

 

 

난 임시로 숫자 5를 리턴하는 Get5Number 함수와 입력받은 두 수를 더해주는 AddNumber 라는 함수를 만들어 주었다.

 

그리고 빌드해주기 전에 Debug모드와 x86 으로 되어있는데 해당을 Release와 x64로 변경해준다.

 

그리고 빌드를 해주면,

 

위와 같이 dll 파일이 생생된다.

 

 

일단 이렇게 두고,

 

언리얼 프로젝트로 넘어가서, DLL파일을 불러오는 곳을 만들어주면 된다. (GameInstance 쪽에서 호출해주어도 되는데)

 

 

무난한  블루프린트 함수 라이브러리로 하자.

그리고 해당 클래스에 함수를 만들어주는데

크게 2가지이다.

 

1.DLL 파일 다루는 함수 (호출/해제)

2.DLL 파일의 함수를 호출하는 함수(?) 이다.

 

위 사진의 아래 2개가 아까의 DLL파일에서 만든 함수 2개를 불러와주는 함수이다.

 

 

우선 함수 내용을 보기전에  cpp 전역변수로 dll함수를 가리키는 함수포인터 3개를 선언해주어야한다.

 

위 2개는 DLL 함수의 맞게 선언한 2개이고, 나머지 1개 보이드 포인터는 dll파일 자체를 가리키는 역할이다.

우선 ImportDLL 함수부터 보면,

 

dll 파일을 경로를 가져오는 변수 filePath에 우선 *FPaths::ProjectPluginDir()-> 프로젝트의 플러그인 폴더 경로를 가져오는 함수에 dll파일을 넣어주자.

 

그리고 함수포인터에 해당 경로를 초기화해준뒤,

 

해당 dll 선언한 함수2개(procName1,procName2)를 전역으로 선언한 함수포인터에 알맞게 넣어준다.

 

프로젝트 폴더의 플러그인(Plugins)에 아까 빌드한 dll파일을 넣는다.

 

 

 

그리고 해제하는 함수이다.

 

 

 

그리고 각각의 블루프린트에서 호출가능한 함수들에 알맞는 함수포인터를 호출해준다.

 

 

 

 

플레이 결과

 

dll에서 처리해준 것과 같이 Get5Num은 5를 출력하고, Add Sum Result는 입력받는 두 수를 더해서 리턴해주는 역할을 수행했다.

 

이렇게 간단하게 정리해보았다.

 

여기서는 블루프린트 함수 라이브러리에 사용했지만, 실제로는 GameInstance에서 선언하여 dll 파일 유무에 따라 게임 실행 자체에 영향을 줄수 있겠다.

 

 

 

 

참고 블로그 :

 

mathmakeworld.tistory.com/35

 

Unreal Blueprint를 이용해 직접 만든 DLL 사용하기

이번 시간에는 Unreal의 Blueprint를 이용해 직접 만든 DLL(Dynamic Link Library)을 사용하는 방법을 알아보겠습니다. 사용 예시 먼저 결과는 다음과 같습니다. 위 블루프린트에 보이는 Add Func 노드와 Add Str

mathmakeworld.tistory.com

minusi.tistory.com/entry/%EC%96%B8%EB%A6%AC%EC%96%BC-%EA%B2%BD%EB%A1%9C-%ED%95%A8%EC%88%98Unreal-FPaths

 

언리얼 경로 함수(Unreal Path Helper)

언리얼에서는 경로에 대한 편리한 함수들을 제공하는 FPath 클래스가 있습니다. 이 클래스에서 제공하는 정적 함수들을 통해서 엔진/프로젝트 디렉토리의 특정 위치에 대한 경로를 FString 형태로

minusi.tistory.com