티스토리 뷰

참고 : http://3dapi.com/dv01_max/

 

맥스플러그인을 제작하기 위해선 맥스 sdk를 설치하여야 한다.

 

설치 후 IGameExporter 샘플예제로 수정 작업을 한다.

 

익스포터 제작시 디버깅을 하기 위해서 위에 사이트에서 참고하였다.

 

맥스의 경우 실행되면서 dll을 모두 로드 하는데 여기서 중요한 것이. 맥스에서 익스포터터 버튼을 누를 시 다시 로드를 한다.

 

 

 

 

버튼을 누르면 Plugins에 있는 플러그인들이 로드가 되는데 로드가 되면서 아래 클래스의 Create를 호출하면서 IGameExporter을 로딩하게 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class IGameExporterClassDesc:public ClassDesc2 {
public:
    int             IsPublic() { return TRUE; }
    void *            Create(BOOL loading = FALSE) { return new IGameExporter(loading); }
    const TCHAR *    ClassName() { return GetString(IDS_CLASS_NAME); }
    SClass_ID        SuperClassID() { return SCENE_EXPORT_CLASS_ID; }
    Class_ID        ClassID() { return IGAMEEXPORTER_CLASS_ID; }
    const TCHAR*     Category() { return GetString(IDS_CATEGORY); }
 
    const TCHAR*    InternalName() { return _T("IGameExporter"); }    // returns fixed parsable name (scripter-visible name)
    HINSTANCE        HInstance() { return hInstance; }                // returns owning module handle
 
};
 
cs

 

 

그럼 로딩을 할때 로드를 해주는데 이때 위에 참고한 사이트에서와 다르게 한 점을 위 사이트에서 처럼 하면 overflow가 발생하게 된다.

 

생성자에서 로드를 하고 소멸자에서 해제를 해주어야 하는데, 구조가 재귀가 되다보니 계속 로드를 하게 되면서 문제가 발생하였었다.

 

그래서 아래에서 처럼 바꾸게 되었다.

 

눈여겨 볼부분은 LoadLibrary부분이다.

 

원래 맥스 Plugins폴더에 있는 dle파일은 IGameExporterTest.dle인데, 그 녀석은 맥스가 실행될때 로드된 녀석이고

 

아래 Test1.dl는 새로 복사해둔 녀석이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
IGameExporter::IGameExporter(BOOL loading)
{
    if( loading &&  (NULL!=m_hInst) )
        return;
    //AllocConsole();
 
    if( NULL == m_hInst )
    {
        m_hInst = LoadLibrary( "../../../../IGameExporterTest1.dle" );
        typedef ClassDesc* (*_LibClassDesc)(int i);
        _LibClassDesc pLibClassDesc = (_LibClassDesc)GetProcAddress( m_hInst, "LibClassDesc" );
        if( pLibClassDesc )
        {
            m_pChildDesc = pLibClassDesc(0);
            m_pChild = (SceneExport*)m_pChildDesc->Create(true);
        }
    }
 
    m_iRefCount++;
}
cs

 

 

 

복사를 해야 하기 때문에 비쥬얼 스튜디오의 빌드 후 이벤트에 복사 명령어를 넣어줌으로 깔끔하게 해결.

 

 

 

그럼 이제 신나게 디버그 버튼 누르면 맥스가 실행되게 한다.

 

아래에 처음엔 연결 메뉴에 아니오라고 해야 한다.

 

실행 후엔 예로 바꿔서 F5번을 누르면 바로 연결 되게 함으로써 작업을 쉽게 할 수 있다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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 31
글 보관함