본문 바로가기

프로그래밍/MaxSDK

[MAXSDK] 인터페이스 클래스 개관

원문 : 3ds MAX SDK 도움말. Interface Class Overview

인터페이스 클래스 개관

3ds 맥스는 플러그인을 위해서 사용할 수 있는 수 많은 함수들을 제공한다. 맥스에서 이 함수들을 호출하기 위해서 플러그인이 사용할 수 있는 두 가지 접근법이 있다.

    1. 플러그인들은 CORE.DLL 에 있는 함수들을 직접 호출한다.
    2. 인터페이스 포인터에서 메서드를 호출한다.


CORE.DLL 의 주요 목적은 그것이 플러그인이 그것이 상속한 기저 클래스의 일부 메서드들을 위한 구현을 포함할 수 있게 하는 것이다. 일반적으로 플러그인들은 이들 메서드들을 직접 호출하지 않고, 상속된 클래스의 일부로서 그것들을 상속한다. CORE.DLL 은 그것이 외포(export)하는 수많은 함수들을 가지고 있다. 플러그인은 CORE.LIB 에 링크하여, 이 메서드들을 다른 함수들처럼 호출하기만 하면 된다.

3DSMAX.EXE 는 CORE.DLL 과는 달리 어떠한 메서드도 외포하지 않는다. 대신에 플러그인은 인터페이스 클래스에 대한 포인터를 통해서 3ds 맥스의 함수들을 호출한다. 인터페이스 클래스는 단순히 데이터 멤버 없이 순수 가상 메서드만을 가지고 있는 클래스일 뿐이다. 이들 메서드들은 본질적으로는 단지 함수 포인터의 테이블일 뿐이다.

이 메서드들 중 일부는 일반적(general)이다. 예를 들어 Interface 클래스는 뷰포트를 다시 그리거나, 표준 3ds 맥스 다이얼로그 박스를 사용해 작업하거나, 맥스의 좌표계 시스템을 사용해 작업하는 것과 같은 일들을 수행하기 위한 메서드들을 제공한다. 다른 인터페이스들은 특정 문맥(context)을 가지고 있다. 예를 들어 ViewExp 인터페이스 클래스는 뷰포트에 대한 인터페이스를 제공한다. 이 인터페이스의 메서드들은 특정 뷰포트를 참조한다.

대부분의 인터페이스들은 그것들이 사용될 수 없는 생명 주기를 가지고 있다. 예를 들어 수정자가 커맨드 패널의 수정자 가지에서 활성화될 때, 그것의 BeginEditParams() 메서드가 호출되며, IObjParams 인터페이스가 넘겨진다. 이 인터페이스 포인터는 수정자의 EndEditParams() 메서드가 호출될 때까지 유효하게 만들기 위해서 정의된다. 만약 플러그인이 이 인터벌의 외부에서 참조되었고 그것의 메서드를 호출하였다면, 그 결과는 어떻게 될지 알 수 없다. 다른 예를 들어 보자. INode 인터페이스 포인터가 Object::Display() 에 넘겨질 때, 그것은 함수 호출 동안에만 유효하다.

3ds 맥스에 있는 인터페이스의 모든 리스트를 원한다면 Interface Classes 섹션을 참조하라.

주의 : 개발자는 소스코드에서 클래스 저장 속성 CoreExport 와 DllExport 를 자주 보게 될 것이다. 이들 속성은 단순히 3ds 맥스가 DLL로부터 함수, 데이터, 오브젝트들을 외포하여 플러그인이 그것들을 호출할 수 있도록 하기 위해서 사용되는 C++ 언어에 대한 Microsoft 지정 확장일 뿐이다.

(역주 : 다시 말해 두 가지는 다음과 같은 매크로이다.
    #define CoreExport __declspec(dllexport)
    #define DllExport __declspec(dllexport)
)



[출처] - 라이푸님의 http://blog.naver.com/lifeisforu 네이버 블로그