• 스키마는 다음과 같다. 일단은 크로스 플랫폼을 지원하지는 않는다. 만약 크로스 플랫폼을 지원한다면, Unreal처럼 엔트리포인트에 서페이스 함수를 둬서, 플랫폼 별로, 진입점을 호출하는 것이다.
  • 엔진 클래스를 따로 만들고, 윈도우를 생성할지, 아니면, 언리얼처럼 엔진 루프를 실행할지, 향후에 어느 구조가 더 좋을까?

 

  • 초기 세팅
    • 1. Visual Studio 2022에서 빈 프로젝트(이름은 Client)를 생성한다.
    • 2. Client의 프로퍼티에서 서브시스템을 Windows로 바꾼다.
    • 3. 솔루션을 오른클릭하고, DLL 프로젝트(이름은 Engine)를 생성한다.
    • 4. Client를 오른 클릭하고, 빌드 오더, 빌드 디펜던시를 설정하는데, Engine을 먼저 빌드하고, Client를 빌드하게 한다.
    • 5. Client와 Engine의 출력 디렉토리와 중간 디렉토리를 설정한다. 
      • OutDir 는 : $(SolutionDir)bin\$(Platform)\$(Configuration)\$(ProjectName)\
      • 중간Dir 는 : $(SolutionDir)intermediate\$(Platform)\$(Configuration)\$(ProjectName)\
    • 6. Engine을 빌드하면, Engine의 OutDir에 Engine.dll과 Engine.lib가 생성된다. 
      • Engine의 빌드 후 이벤트를 추가한다.
        • if not exist "$(SolutionDir)lib\$(ProjectName)\$(Platform)\$(Configuration)" mkdir "$(SolutionDir)lib\$(ProjectName)\$(Platform)\$(Configuration)"
        • copy /y "$(OutDir)$(ProjectName).lib" "$(SolutionDir)lib\$(ProjectName)\$(Platform)\$(Configuration)\$(ProjectName).lib"
        • copy /y "$(OutDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName)\$(Platform)\$(Configuration)\$(ProjectName).dll"
    • 7. Client는 Engine.dll과 Engine.lib의 위치를 알아야 한다.
      • 추가 라이브러리 디렉토리에 $(SolutionDir)lib\Engine\$(Platform)\$(Configuration)\ 을 추가하고, Linker/Input/Additional Dependency에 Engine.lib를 추가한다.
      • 디버깅에 환경변수를 추가한다. path=$(SolutionDir)lib\Engine\$(Platform)\$(Configuration)\;%PATH%
        $(LocalDebuggerEnvironment)
    • 8. Client의 Additional Includes에 Engine 프로젝트의 소스 경로를 추가한다.
    • 9. Engine 프로젝트의 서브시스템을 Not set으로 바꾸고, 빌드 속도 향상을 위해서, Engine 프로젝트에 Core.h와 Core.cpp를 추가하고, Core.h를 미리 컴파일된 헤더로 설정한다. C/C++ 전처리기에 ENGINE_BUILD_DLL을 추가하고 Core.h에 다음 코드를 추가한다. export 할, 클래스나 함수에 ENGINE_API를 입력하고 마음껏 사용한다.
#ifdef ENGINE_BUILD_DLL
#define ENGINE_API __declspec(dllexport)
#else
#define ENGINE_API __declspec(dllimport)
#endif // ENGINE_BUILD_DLL

 

  • 이로써 DLL 세팅은 끝났다. 향후 DirectXTex 같은 외부 라이브러리를 추가할때는, 빌드 후 이벤트에서 생성한, lib 폴더에 lib를 추가하고, 헤더 경로는 사용할 프로젝트에서 추가하면 된다. 
  • 정상적으로 DLL이 추가가 됬다면 빌드시 오류를 출력하지 않는다.

 

'삽질 > 뻘짓' 카테고리의 다른 글

좋은 코드에 대한 딜레마.  (0) 2023.03.27
DX11 or DX12 당신의 선택은?  (0) 2022.10.28
정형 데이터 vs 비정형 데이터  (0) 2022.10.06
[DirectX11] PipeLine Buffer Binding  (0) 2022.08.17
복사했습니다!