001    package org.bridj.cpp.mfc;
002    
003    import org.bridj.Pointer;
004    import org.bridj.ann.Field;
005    import org.bridj.func.Fun0;
006    
007    public class CRuntimeClass extends MFCObject {
008            // Attributes
009            @Field(0)
010            public native Pointer<Byte>  m_lpszClassName();
011            public native void  m_lpszClassName(Pointer<Byte> m_lpszClassName);
012            @Field(1)
013            public native int m_nObjectSize();
014            public native void m_nObjectSize(int m_nObjectSize);
015            @Field(2)
016            public native int m_wSchema(); // schema number of the loaded class
017            public native void m_wSchema(int m_wSchema); // schema number of the loaded class
018            
019            @Field(3)
020            public native Pointer<Fun0<Pointer<CObject>>> m_pfnCreateObject(); // NULL => abstract class
021            public native void m_pfnCreateObject(Pointer<Fun0<Pointer<CObject>>> m_pfnCreateObject); // NULL => abstract class
022    
023            /*#ifdef _AFXDLL
024                    CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();
025            #else
026                    CRuntimeClass* m_pBaseClass;
027            #endif
028            */
029            @Field(4)
030            public native Pointer<CRuntimeClass> m_pBaseClass();
031            public native void m_pBaseClass(Pointer<CRuntimeClass> m_pBaseClass);
032            
033    // Operations
034            public native Pointer<CObject> CreateObject();
035            public native boolean IsDerivedFrom(Pointer<CRuntimeClass> pBaseClass);
036    
037            // dynamic name lookup and creation
038            public native static Pointer<CRuntimeClass> FromName(Pointer<Byte> /*LPCSTR*/ lpszClassName);
039            public native static Pointer<CRuntimeClass> FromName$2(Pointer<Character> lpszClassName);
040            public native static Pointer<CObject> CreateObject(Pointer<Byte> lpszClassName);
041            public native static Pointer<CObject> CreateObject$2(Pointer<Character> lpszClassName);
042    
043            // Implementation
044            public native void Store(Pointer<CArchive> ar);
045            public native static Pointer<CRuntimeClass> Load(Pointer<CArchive> ar, Pointer<Integer> pwSchemaNum);
046    
047            // CRuntimeClass objects linked together in simple list
048            @Field(5)
049            public native Pointer<CRuntimeClass> m_pNextClass();       // linked list of registered classes
050            public native void m_pNextClass(Pointer<CRuntimeClass> m_pNextClass);       // linked list of registered classes
051            @Field(6)
052            public native Pointer<?> /*AFX_CLASSINIT*/ m_pClassInit();
053            public native void m_pClassInit(Pointer<?> m_pClassInit);
054    }