001/* 002 * BridJ - Dynamic and blazing-fast native interop for Java. 003 * http://bridj.googlecode.com/ 004 * 005 * Copyright (c) 2010-2013, Olivier Chafik (http://ochafik.com/) 006 * All rights reserved. 007 * 008 * Redistribution and use in source and binary forms, with or without 009 * modification, are permitted provided that the following conditions are met: 010 * 011 * * Redistributions of source code must retain the above copyright 012 * notice, this list of conditions and the following disclaimer. 013 * * Redistributions in binary form must reproduce the above copyright 014 * notice, this list of conditions and the following disclaimer in the 015 * documentation and/or other materials provided with the distribution. 016 * * Neither the name of Olivier Chafik nor the 017 * names of its contributors may be used to endorse or promote products 018 * derived from this software without specific prior written permission. 019 * 020 * THIS SOFTWARE IS PROVIDED BY OLIVIER CHAFIK AND CONTRIBUTORS ``AS IS'' AND ANY 021 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 022 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 023 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY 024 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 025 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 026 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 027 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 028 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 029 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 030 */ 031package org.bridj.cpp.mfc; 032 033import org.bridj.Pointer; 034import org.bridj.ann.Field; 035import org.bridj.func.Fun0; 036 037public class CRuntimeClass extends MFCObject { 038 // Attributes 039 040 @Field(0) 041 public native Pointer<Byte> m_lpszClassName(); 042 043 public native void m_lpszClassName(Pointer<Byte> m_lpszClassName); 044 045 @Field(1) 046 public native int m_nObjectSize(); 047 048 public native void m_nObjectSize(int m_nObjectSize); 049 050 @Field(2) 051 public native int m_wSchema(); // schema number of the loaded class 052 053 public native void m_wSchema(int m_wSchema); // schema number of the loaded class 054 055 @Field(3) 056 public native Pointer<Fun0<Pointer<CObject>>> m_pfnCreateObject(); // NULL => abstract class 057 058 public native void m_pfnCreateObject(Pointer<Fun0<Pointer<CObject>>> m_pfnCreateObject); // NULL => abstract class 059 060 /*#ifdef _AFXDLL 061 CRuntimeClass* (PASCAL* m_pfnGetBaseClass)(); 062 #else 063 CRuntimeClass* m_pBaseClass; 064 #endif 065 */ 066 @Field(4) 067 public native Pointer<CRuntimeClass> m_pBaseClass(); 068 069 public native void m_pBaseClass(Pointer<CRuntimeClass> m_pBaseClass); 070 071// Operations 072 public native Pointer<CObject> CreateObject(); 073 074 public native boolean IsDerivedFrom(Pointer<CRuntimeClass> pBaseClass); 075 076 // dynamic name lookup and creation 077 public native static Pointer<CRuntimeClass> FromName(Pointer<Byte> /*LPCSTR*/ lpszClassName); 078 079 public native static Pointer<CRuntimeClass> FromName$2(Pointer<Character> lpszClassName); 080 081 public native static Pointer<CObject> CreateObject(Pointer<Byte> lpszClassName); 082 083 public native static Pointer<CObject> CreateObject$2(Pointer<Character> lpszClassName); 084 085 // Implementation 086 public native void Store(Pointer<CArchive> ar); 087 088 public native static Pointer<CRuntimeClass> Load(Pointer<CArchive> ar, Pointer<Integer> pwSchemaNum); 089 090 // CRuntimeClass objects linked together in simple list 091 @Field(5) 092 public native Pointer<CRuntimeClass> m_pNextClass(); // linked list of registered classes 093 094 public native void m_pNextClass(Pointer<CRuntimeClass> m_pNextClass); // linked list of registered classes 095 096 @Field(6) 097 public native Pointer<?> /*AFX_CLASSINIT*/ m_pClassInit(); 098 099 public native void m_pClassInit(Pointer<?> m_pClassInit); 100}