Engine에서 Component와 Script를 구현한다.
원래 Script.dll 은 Engine.dll 에 의존적이기 때문에 dll 끼리의 상속을 진행하였다.
Script.dll 과 Engine.dll 의 상속
Test를 위해 Engine.dll 에는 CScript만 구성.
Script.dll는 CTestScript를 구성하였다.
CTestScript의 Print가 호출되면 부모인 CScript와 자신의 Print를 호출하도록 했다.
Script.dll 에서 Engine 정보 링크.
이 관계에서는 CScript라는 타입을 참조만 하는 것이 아니라 실제 함수 호출도 이루어지기 때문에
Script.dll 에서 .h 선언뿐 아니라 lib 링크를 해줘야 한다.
실제 애플리케이션에서의 호출
처음에 자꾸 Script.dll 을 혼자 호출하는데 null이 떠서 애먹었는데
Engine.dll 에 의존적이기 때문에 함께 호출해줘야 하며, Engine.dll 을 먼저 호출해줘야한다.
실제 테스트
애플리케이션에서 사용.
Component와 Script
멤버 함수 Virtual 붙여주자.
이유는 명시적 호출시 함수들은 런타임에 dll 로 매칭이 될텐데 컴파일 시점에는 모르기 때문에 링크 에러가 발생한다.
virtual 을 붙이면 vtbl 과 rtti 등이 붙을텐데 이러한 정보들은 런타임에 처리한다는 점을 깜빡했다.
일반적인 함수들은 컴파일 타임에 해결.
아래 TestScript의 virtual 을 빼고 실행하면 링크 에러가 발생한다.
궁금증
.exe 실행 도중에 dll 파일을 수정하면 런타임중 문제없이 교체될까?
만약 런타임중 교체를 허용하려면 엔진에서 game play 상태를 stop 으로 한뒤 다시 load 하도록 따로 처리해주어야 하지 않을까 싶다.
그것에 대해서는 따로 공부해야할듯.
다음 할일
1.visual studio console mode 에서 window app 으로 변경하기
2. 윈도우 포커스 아웃했다가 포커스 인할때 1번 모든 script의 변경점을 찾아서 다시 빌드하기.
3. script 변경점은 메타파일? 해시로 찍고 변했는지 관찰??
'포트폴리오 만들기' 카테고리의 다른 글
8.구조 바꿈/ Sha256 다운받아서 프로젝트에 적용. (1) | 2023.12.21 |
---|---|
7. 콘솔 -> 윈도우 모드로 변경 / GameManager/Script 수정점 감시 (0) | 2023.12.20 |
4.MemoryPool,ObjectPool TestCode , Singleton 변경점 (0) | 2023.12.14 |
3.Priority Queue , LRU Queue , Map Lib 추가 및 TestCode 작성. (0) | 2023.12.13 |
2.MySTL lib 만들기 / 빌드 이벤트 - bat 파일 사용. (0) | 2023.12.06 |
댓글