일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C++최적화
- C++
- UE_LOG
- 정렬
- 언리얼가비지컬렉터
- UE4 커스텀로그
- 정렬알고리즘
- 약참조
- 언리얼엔진구조체
- 자료구조
- 애셋로드
- dataasset
- UELOG
- 람다사용정렬
- 프로그래머스
- 선택정렬
- BFS
- 델리게이트
- 데이터애셋
- 스마트포인터
- 강참조
- enumasByue
- moreeffectiveC++
- unorder_map
- 람다
- 크리티컬섹션
- 알고리즘
- UML관련
- map
- stl
- Today
- Total
기억을 위한 기록들
UE4 에서 dll 파일 다루기 본문
게임 프로젝트를 패키징한뒤 개발자의 입맛에 따라 필요한 정보를 게임실행 이외의 파일에 저장이 필요로 할때가 있다.
그게 바로 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)를 전역으로 선언한 함수포인터에 알맞게 넣어준다.
그리고 해제하는 함수이다.
그리고 각각의 블루프린트에서 호출가능한 함수들에 알맞는 함수포인터를 호출해준다.
플레이 결과
dll에서 처리해준 것과 같이 Get5Num은 5를 출력하고, Add Sum Result는 입력받는 두 수를 더해서 리턴해주는 역할을 수행했다.
이렇게 간단하게 정리해보았다.
여기서는 블루프린트 함수 라이브러리에 사용했지만, 실제로는 GameInstance에서 선언하여 dll 파일 유무에 따라 게임 실행 자체에 영향을 줄수 있겠다.
참고 블로그 :
'UnrealEngine' 카테고리의 다른 글
[UE4]플러그인이란? (0) | 2022.04.17 |
---|---|
[언리얼엔진] 가비지 컬렉션이란 ? (언리얼엔진에서의 메모리 관리) (0) | 2021.11.07 |
[언리얼엔진] 리플렉션 (aka. 프로퍼티 시스템) (0) | 2021.11.06 |
UE4 오브젝트 풀링 구현 (탄막슈팅/C++) (0) | 2020.11.30 |
IWYU 레퍼런스 (0) | 2018.12.30 |