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

📄 jni_ibss.cpp

📁 JAVA 通过JNI 调用 TUXEDO服务的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// jni_ibss.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"

//---------------------------------------------------------------------*/
JNIByteBuffer::JNIByteBuffer(JNIEnv* env,jobject obj)
{
	mEnv = env;
	mObj = obj;
	buf = NULL;
	if(mObj==NULL)
		mObj = JNU_CallStaticMethodByName(mEnv,NULL,"java/nio/ByteBuffer","allocate","(I)Ljava/nio/ByteBuffer;",(jint)64).l;
};

JNIByteBuffer::JNIByteBuffer(JNIEnv* env)
{
	mEnv = env;
	mObj = NULL;
	buf = NULL;
	mObj = JNU_CallStaticMethodByName(mEnv,NULL,"java/nio/ByteBuffer","allocate","(I)Ljava/nio/ByteBuffer;",(jint)64).l;
};

JNIByteBuffer::~JNIByteBuffer()
{
	if(buf!=NULL)
		delete [] buf;
};

jbyte* JNIByteBuffer::getBytes()
{
	if(mObj==NULL)
		return NULL;
    jbyteArray jarr=(jbyteArray)JNU_CallMethodByName(mEnv, NULL, mObj, "array", "()[B").l;
	if(jarr==NULL)
		return NULL;

	jbyte *arr=mEnv->GetByteArrayElements(jarr,0);
	if(arr==NULL)
		return NULL;
	buf_len = mEnv->GetArrayLength(jarr); 

	if(buf)
		delete [] buf;
	buf = new jbyte[buf_len+1];
	buf[buf_len] = '\0';
	memcpy(buf,arr,buf_len);

	mEnv->ReleaseByteArrayElements(jarr,arr,0);
	return buf;	
};

void JNIByteBuffer::setBytes(const jbyte* newValue, jsize len)
{
    jbyteArray elemArr;

    elemArr = mEnv->NewByteArray(len);
    if (elemArr == NULL) {
        return; /* exception thrown */
    }
    mEnv->SetByteArrayRegion(elemArr, 0, len, newValue);
    mObj = JNU_CallStaticMethodByName(mEnv, NULL, "java/nio/ByteBuffer", "wrap", "([B)Ljava/nio/ByteBuffer;", elemArr).l;
    mEnv->DeleteLocalRef(elemArr);
};

void JNIByteBuffer::setBytes(jbyteArray newValue)
{
    mObj = JNU_CallStaticMethodByName(mEnv, NULL, "java/nio/ByteBuffer", "wrap", "([B)Ljava/nio/ByteBuffer;", newValue).l;
};

void JNIByteBuffer::setBytes(const string& newValue)
{
	const char *str=newValue.c_str();
	jsize len=newValue.length();

	setBytes((const jbyte*)str,len);
};

JNIByteBuffer::operator jobject()
{
	//返回 ByteBuffer 对象
	return mObj;
};

//---------------------------------------------------------------------*/
JNIClassField::JNIClassField(JNIEnv* env,jobject obj)
{
	mEnv = env;
	mObj = obj;
};

void JNIClassField::setEnv(JNIEnv* env,jobject obj)
{
	mEnv = env;
	mObj = obj;
};

JNIClassField::JNIClassField()
{
};

JNIClassField::~JNIClassField()
{
};

jfieldID JNIClassField::getFieldID(const char *fieldName,const char *sig)
{
	if((mEnv==NULL)||(mObj==NULL))
		return NULL;
	//获取对象
	jclass cls = mEnv->GetObjectClass(mObj);
	if(cls==NULL)
		return NULL;
	//获取字段
	return mEnv->GetFieldID(cls,fieldName,sig);
};

int JNIClassField::copyBytes2Buffer(const char *fieldName, char *dest_buf, const int buf_len)
{
	jfieldID jfld = getFieldID(fieldName,"[B");
	if( jfld==NULL)
		return 0;
	jbyteArray jarr=(jbyteArray)mEnv->GetObjectField(mObj,jfld);
	if(jarr==NULL)
		return 0;

	jbyte *arr=mEnv->GetByteArrayElements(jarr,0);
	if(arr==NULL)
		return -1;
	jsize size = mEnv->GetArrayLength(jarr); 

	//检查缓冲区是否足够大
	if(size>buf_len)
		size=buf_len;
	memcpy(dest_buf,arr,size);
	mEnv->ReleaseByteArrayElements(jarr,arr,0);
	return size;
};

jobject JNIClassField::getObjectFieldValue(const char *fieldName, const char *sig)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,sig);
	if(jfld==NULL)
		return NULL;
	return mEnv->GetObjectField(mObj,jfld);
};

void JNIClassField:: setObjectFieldValue(const char *fieldName,jobject newValue,const char * sig)
{
	jfieldID jfld = getFieldID(fieldName,sig);
	if(jfld==NULL)
		return ;
	mEnv->SetObjectField(mObj,jfld,newValue);
};

jboolean JNIClassField::getBooleanFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"Z");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetBooleanField(mObj,jfld);
};

void JNIClassField:: setBooleanFieldValue(const char *fieldName,jboolean newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"Z");
	if(jfld==NULL)
		return;
	mEnv->SetBooleanField(mObj,jfld,newValue);
};

jbyte JNIClassField::getByteFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"B");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetByteField(mObj,jfld);
};

void JNIClassField:: setByteFieldValue(const char *fieldName,jbyte newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"B");
	if(jfld==NULL)
		return;
	mEnv->SetByteField(mObj,jfld,newValue);
};

jchar JNIClassField::getCharFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"C");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetCharField(mObj,jfld);
};

void JNIClassField:: setCharFieldValue(const char *fieldName,jchar newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"C");
	if(jfld==NULL)
		return;
	mEnv->SetCharField(mObj,jfld,newValue);
};

jshort JNIClassField::getShortFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"S");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetShortField(mObj,jfld);
};

void JNIClassField:: setShortFieldValue(const char *fieldName,jshort newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"S");
	if(jfld==NULL)
		return;
	mEnv->SetShortField(mObj,jfld,newValue);
};

jint JNIClassField::getIntFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"I");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetIntField(mObj,jfld);
};

void JNIClassField:: setIntFieldValue(const char *fieldName,jint newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"I");
	if(jfld==NULL)
		return;
	mEnv->SetIntField(mObj,jfld,newValue);
};

jlong JNIClassField::getLongFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"J");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetLongField(mObj,jfld);
};

void JNIClassField:: setLongFieldValue(const char *fieldName,jlong newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"J");
	if(jfld==NULL)
		return;
	mEnv->SetLongField(mObj,jfld,newValue);
};

jfloat JNIClassField::getFloatFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"F");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetFloatField(mObj,jfld);
};

void JNIClassField:: setFloatFieldValue(const char *fieldName,jfloat newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"F");
	if(jfld==NULL)
		return;
	mEnv->SetFloatField(mObj,jfld,newValue);
};

jdouble JNIClassField::getDoubleFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"D");
	if(jfld==NULL)
		return NULL;
	return mEnv->GetDoubleField(mObj,jfld);
};

void JNIClassField:: setDoubleFieldValue(const char *fieldName,jdouble newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"D");
	if(jfld==NULL)
		return;
	mEnv->SetDoubleField(mObj,jfld,newValue);
};

void JNIClassField:: setStringFieldValue(const char *fieldName,jstring newValue)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"Ljava/lang/String;");
	if(jfld==NULL)
		return;
	mEnv->SetObjectField(mObj,jfld,newValue);
};

void JNIClassField::setStringFieldValue(const char *fieldName,const char *value)
{
	JNIString jnistr(mEnv,value);
	setStringFieldValue(fieldName,(jstring)jnistr);
};

void JNIClassField::setStringFieldValue(const char *fieldName,string& value)
{
	JNIString jnistr(mEnv,value);
	setStringFieldValue(fieldName,(jstring)jnistr);
};

jstring JNIClassField::getStringFieldValue(const char *fieldName)
{
	//获取字段
	jfieldID jfld = getFieldID(fieldName,"Ljava/lang/String;");
	if(jfld==NULL)
		return NULL;

	return (jstring)mEnv->GetObjectField(mObj,jfld);
};

void JNIClassField::getStringFieldValue(const char *fieldName,string& value)
{
	value.assign("");
	jstring jstr=getStringFieldValue(fieldName);
	if(jstr==NULL)
		return;

	JNIString jnistr (mEnv,jstr);
	value.assign(jnistr.GetString().c_str());
};

void JNIClassField::copyString2Buffer(const char *fieldName, char *dest_buf, const int buf_len)
{
	//注意:必须保证 dest_buf 至少分配 buf_len+1 个字符
	dest_buf[0]='\0';

	jstring jstr=getStringFieldValue(fieldName);
	if(jstr==NULL)
		return;

	JNIString jnistr (mEnv,jstr);
	strncpy(dest_buf,jnistr.GetString().c_str(),buf_len);
	dest_buf[buf_len] = '\0';
};


/*----------------------------------------------------------*/
JNIString::JNIString ()
{
	// Default ctor - disallowed
	mEnv = NULL;
	mJstr = NULL;
	mChars = NULL;
};

JNIString::JNIString(JNIEnv *env, const jstring str)
{
	mEnv = env;
	mJstr = NULL;

⌨️ 快捷键说明

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