⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java_array.h

📁 C调用Java的一个例子程序
💻 H
字号:
/* ^_^ 
 *
 *		Copyright (c) 2006 Hexin
 *
 *	Description:
 *	  TODO:
 *	Create:
 *		Date			  Time				Author
 *	------------------------------------------------
 *   2006-3-22           10:02:09			XiaoWei
 */

/* ^_^ 
 *	 Location : 
 *	 File     : JAVA_Array.h
 *	 Version  : 1.0.0.0
 *	 Note     : 
 */

#if !defined(__JAVA_Array_h__)
#define __JAVA_Array_h__

//template<typename _Type>
//class JAVA_Array  
//{};

#include "JAVA_Base.h"
template<typename _Type>
class JAVA_Array {};



//Int
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_IntArray
#define JNI_ElementType				JNI_Int
#define JNI_SetArrayRegion			SetIntArrayRegion
#define JNI_NewArray				NewIntArray
#define JNI_GetArrayElements		GetIntArrayElements
#define JNI_ReleaseArrayElements	ReleaseIntArrayElements
#include "JAVA_Array_Template.h"

//Long
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_LongArray
#define JNI_ElementType				JNI_Long
#define JNI_SetArrayRegion			SetLongArrayRegion
#define JNI_NewArray				NewLongArray
#define JNI_GetArrayElements		GetLongArrayElements
#define JNI_ReleaseArrayElements	ReleaseLongArrayElements
#include "JAVA_Array_Template.h"


//Float
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_FloatArray
#define JNI_ElementType				JNI_Float
#define JNI_SetArrayRegion			SetFloatArrayRegion
#define JNI_NewArray				NewFloatArray
#define JNI_GetArrayElements		GetFloatArrayElements
#define JNI_ReleaseArrayElements	ReleaseFloatArrayElements
#include "JAVA_Array_Template.h"


//Double
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_DoubleArray
#define JNI_ElementType				JNI_Double
#define JNI_SetArrayRegion			SetDoubleArrayRegion
#define JNI_NewArray				NewDoubleArray
#define JNI_GetArrayElements		GetDoubleArrayElements
#define JNI_ReleaseArrayElements	ReleaseDoubleArrayElements
#include "JAVA_Array_Template.h"






//Short
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_ShortArray
#define JNI_ElementType				JNI_Short
#define JNI_SetArrayRegion			SetShortArrayRegion
#define JNI_NewArray				NewShortArray
#define JNI_GetArrayElements		GetShortArrayElements
#define JNI_ReleaseArrayElements	ReleaseShortArrayElements
#include "JAVA_Array_Template.h"



//Char
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_CharArray
#define JNI_ElementType				JNI_Char
#define JNI_SetArrayRegion			SetCharArrayRegion
#define JNI_NewArray				NewCharArray
#define JNI_GetArrayElements		GetCharArrayElements
#define JNI_ReleaseArrayElements	ReleaseCharArrayElements
#include "JAVA_Array_Template.h"


//Byte
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_ByteArray
#define JNI_ElementType				JNI_Byte
#define JNI_SetArrayRegion			SetByteArrayRegion
#define JNI_NewArray				NewByteArray
#define JNI_GetArrayElements		GetByteArrayElements
#define JNI_ReleaseArrayElements	ReleaseByteArrayElements
#include "JAVA_Array_Template.h"



//Boolean
#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif

#define JNI_ArrayType				JNI_BooleanArray
#define JNI_ElementType				JNI_Boolean
#define JNI_SetArrayRegion			SetBooleanArrayRegion
#define JNI_NewArray				NewBooleanArray
#define JNI_GetArrayElements		GetBooleanArrayElements
#define JNI_ReleaseArrayElements	ReleaseBooleanArrayElements
#include "JAVA_Array_Template.h"



#ifdef JNI_ArrayType
#undef JNI_ArrayType
#endif

#ifdef JNI_SetArrayRegion
#undef JNI_SetArrayRegion
#endif

#ifdef JNI_NewArray
#undef JNI_NewArray
#endif

#ifdef JNI_GetArrayElements
#undef JNI_GetArrayElements
#endif

#ifdef JNI_ReleaseArrayElements
#undef JNI_ReleaseArrayElements
#endif

#ifdef JNI_ElementType
#undef JNI_ElementType
#endif



template<>
class JAVA_Array<JNI_Object>  : public JAVA_Base
{
public:
	typedef		JNI_Object		_ElementType;
private:
	JNI_ObjectArray		m_array;
	JNI_Object*			m_elems; 
	JNI_Size			m_size;
public:

	JAVA_Array()
	{
		getentironment();
		m_size  = -1;
		m_array = JNI_NULL;
		m_elems = JNI_NULL;
	}
	JAVA_Array(JNI_Size _size,JAVA_Class & _class,JAVA_Object & _object)
	{
		getentironment();
		createArray(_size,_class,_object);
	}
	
	JAVA_Array(JNI_ObjectArray _array)
	{
		getentironment();
		m_size  = 0;
		m_array = _array;
		m_elems = JNI_NULL;
	}

	~JAVA_Array()
	{
		destroyArray();
	}


	_ElementType  getAt(JNI_Size _index) 
	{
		_checkIndex(_index);
		return getEnv()->GetObjectArrayElement(m_array,_index);
	}

	void  setAt(JNI_Size _index,_ElementType& _Value) 
	{
		_checkIndex(_index);
		getEnv()->SetObjectArrayElement(m_array,_index,_Value);
		m_elems = JNI_NULL;
	}


	bool	createArray(JNI_Size _size,JAVA_Class & _class,JAVA_Object & _object)
	{
		JNI_ObjectArray _array =getEnv()->NewObjectArray(_size,_class.getClass(),_object.getObject());
		if (_array) {
			m_size = _size;
			m_elems = JNI_NULL;
			m_array = _array;
			return true;
		}
		m_size = _size;
		m_elems = JNI_NULL;
		m_array = JNI_NULL;
		return false;

	}

	JNI_Size size() const 
	{
		return m_size;
	}
	void	destroyArray()
	{
		
	}

	operator JNI_ObjectArray() const
	{
		return m_array;
	}

	JNI_ObjectArray getJniArray() const
	{
		return m_array;
	}

protected:

	void	_checkIndex(JNI_Size &index)
	{
		if (index < 0) {
			index = 0;
			return;
		}
		JNI_Size __size = m_size;
		if(index >= __size)
		{
			index = __size-1;
			return;
		}
	}

};

#endif // !defined(__JAVA_Array_h__)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -