2008-11-14 2 views
0

이 질문의 출처에 대해 조금 알려 드리겠습니다. 나는 심각한 엔진 2에서 작동하는 1 인칭 슈팅 게임 인 Serious Sam 2 SDK를 가지고 놀았습니다.이 엔진은 MetaData라는 것을 소개합니다. MetaData는 엔진에서 클래스를 직렬화하고 편집기 환경에서 편집 할 수 있도록 사용됩니다 (심각한 편집기 2). 그래서, 대신 예를 들면 : 이제dll에 여분의 데이터를 저장하는 방법은 무엇입니까?

meta ver(1) class CSomeGameItem : CEntity _("Some game item") 
{ 
public: 
    meta int iHealthToGive; _("Amount of health to give") 
} 

을 수준을 할 때, 당신은 "일부 게임 아이템"개체를 삽입 할 수 있습니다 편집기에 표시되지 않습니다

class CSomeGameItem : CEntity 
{ 
    public: 
    int iHealthToGive; 
} 

, 당신은 할 것 레벨에 추가하고 속성 하나를 편집하십시오. 이제는 Croteam (게임 및 엔진 개발자)이 클래스 및 해당 변수에 대한 추가 정보를 dll 파일에 삽입하여이 메타 데이터 시스템을 가능하게 만드는 추가 컴파일러 (Mdc, 메타 데이터 컴파일러)를 사용하고 있음을 알고 있습니다. 사람들이 어떻게했는지에 대한 단서가 있습니까?

아, btw, 메타, ver() 및 _() 키워드는 코드에서 아무 것도 #define하지 않으므로 "일반"컴파일러가 무시합니다.

답변

0

이것은 Qt의 moc (메타 오브젝트 컴파일러)와 다소 비슷합니다. Qt의 경우 추가 C++ 소스 파일을 생성하고 원본 소스 파일과 함께 컴파일 및 링크됩니다.

예제에서 가능한 구현은 생성 된 파일이 추가 정보를 얻거나 속성을 설정하기 위해 호출 할 수있는 함수 집합을 구현하는 것입니다.

1

이 엔진이 Windows에서 실행되는 경우 마음에 떠오르는 한 가지 아이디어는 리소스입니다. exe 또는 dll 리소스의 내용을 수정하는 Windows API가 있습니다. 또한 API는 '외부'exe/dll에서 리소스를 읽을 수 있습니다. 그런 식으로, 여분의 컴파일러는 컴파일 된 exe 파일에 리소스로 메타 데이터를 저장합니다. 그리고 개발 킷은 "기본"exe/dll에서 메타 데이터를 읽을 것입니다.

이제 저는 그 물건을 먹었습니다. 그래서 실제로 작동하는 데 수년이 걸릴 수도 있습니다.

1

확실한 답변을 얻으려면 PE File Format을 살펴보십시오. 이것은 Win32의 바이너리에 대한 저수준 파일 형식입니다. 즉. DLL, EXE, COM 등

PE 파일 레이아웃과 기능을 기록한 책이 많이 있습니다. 그리고 당신이 그것을 탐구하는 것을 허락하는 많은 도구.

짧은 대답은 PE 파일 형식을 사용하면 런타임에 추출 할 수있는 바이너리에 데이터를 포함 할 수 있다는 것입니다. DLL과 Exe는 종종 아이콘과 현지화 텍스트를 포함합니다. 이들은 종종 자원이라고합니다.

MSDN에서 Resource File 섹션을 시작하는 것이 좋습니다. 또한 "리소스 스크립트 (* .rc 파일)"및 "리소스 컴파일러 (rc.exe)"도 조사하십시오.

0

내가 sdk를 한번도 본 적이 없기 때문에 여기 어두운 곳에서 찌르는 듯이 보였습니다.하지만 C + + 컴파일러를 사용하면 한 번, 맞춤 메타 데이터 프로세서를 사용하는 경우 두 번 통과하는 시스템이 발생합니다. 메타 태그를 찾고 연관된 클래스 이름, 인스턴스 멤버 이름 및 _() 태그를 처리 할 수 ​​있습니다. 아마도 일종의 구성 파일이 만들어지고 옆에 놓이거나 리소스 파일로 포함될 수 있습니다. 커스텀 메타 데이터 패스는 C++ 코드 생성기 일 수도 있고 각 클래스에 대해 의사 - 반사를 가능하게하는 코드를 생성합니다.

관련 문제