📄 jni_ibss.cpp
字号:
// 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 + -