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

📄 jni_ibss.h

📁 JAVA 通过JNI 调用 TUXEDO服务的代码
💻 H
字号:
#if !defined(__JNI_IBSS_H_INCLUDE)

#define __JNI_IBSS_H_INCLUDE

class JNIClassField {
private:
	jfieldID getFieldID(const char *fieldName,const char *sig);

public:
	JNIClassField();
	JNIClassField(JNIEnv* env,jobject obj);
	~JNIClassField();

	void setEnv(JNIEnv* env,jobject obj);

	int copyBytes2Buffer(const char *fieldName, char *dest_buf, const int buf_len);
	void copyString2Buffer(const char *fieldName, char *dest_buf, const int buf_len);
	
	jobject getObjectFieldValue(const char *fieldName, const char *sig = "Ljava/lang/Object;");
	jboolean getBooleanFieldValue(const char *fieldName);
	jbyte getByteFieldValue(const char *fieldName);
	jchar getCharFieldValue(const char *fieldName);
	jshort getShortFieldValue(const char *fieldName);
	jint getIntFieldValue(const char *fieldName);
	jlong getLongFieldValue(const char *fieldName);
	jfloat getFloatFieldValue(const char *fieldName);
	jdouble getDoubleFieldValue(const char *fieldName);
	jstring getStringFieldValue(const char *fieldName);
	void getStringFieldValue(const char *fieldName,string& value);

	void setObjectFieldValue(const char *fieldName,jobject newValue, const char *sig = "Ljava/lang/Object;");
	void setBooleanFieldValue(const char *fieldName,jboolean newValue);
	void setByteFieldValue(const char *fieldName,jbyte newValue);
	void setCharFieldValue(const char *fieldName,jchar newValue);
	void setShortFieldValue(const char *fieldName,jshort newValue);
	void setIntFieldValue(const char *fieldName,jint newValue);
	void setLongFieldValue(const char *fieldName,jlong newValue);
	void setFloatFieldValue(const char *fieldName,jfloat newValue);
	void setDoubleFieldValue(const char *fieldName,jdouble newValue);

	void setStringFieldValue(const char *fieldName,jstring newValue);
	void setStringFieldValue(const char *fieldName,const char *value);
	void setStringFieldValue(const char *fieldName,string& value);

private:
    JNIEnv* mEnv;   // The enviroment pointer for this native method.
	jobject mObj;
};

class JNIString {
public:
    JNIString (); // Default ctor - disallowed

    // Create a new instance from the specified jstring
    JNIString(JNIEnv* env, const jstring str);

    // Create a new instance from the specified string
    JNIString(JNIEnv* env, const string& str);

    // Create a new instance as a copy of the specified JNIString
    JNIString(const JNIString& rhs);

    // Delete the instance and release allocated storage
    ~JNIString();

    // assign a new value to this instance from the given string
    JNIString & operator =(const string& rhs);

    // Supply operator methods for converting the JNIString to a string
    // or char*, making it easy to pass JNIString arguments to functions
    // that require string or char* parameters.
    string & GetString();
    operator string();
    operator const char* ();
    operator char* ();
    operator jstring();

private:
    JNIEnv* mEnv;   // The enviroment pointer for this native method.
    jstring mJstr;  // A copy of the jstring object that this JNIString represents
    char* mChars;   // Pointer to a ANSI code page char array
    string mString; // string buffer for holding the "value" of this instance (ANSI code page)
};

class JNIByteBuffer {
private:
	JNIByteBuffer();

public:
	JNIByteBuffer(JNIEnv* env,jobject obj);
	JNIByteBuffer(JNIEnv* env);
	~JNIByteBuffer();

	jbyte* getBytes();
	void setBytes(const jbyte* newValue, jsize len);
	void setBytes(jbyteArray newValue);
	void setBytes(const string& newValue);

	operator jobject();  //返回 ByteBuffer 对象

private:
	JNIEnv* mEnv; 
	jobject mObj;

	jbyte* buf;
	jsize buf_len;
};

//调用某个对象的方法
jvalue JNU_CallMethodByName(JNIEnv *mEnv,
                     jboolean *hasException,
                     jobject obj, 
                     const char *method_name,
                     const char *descriptor,
                     ...);

//调用某个对象的静态方法(按对象名)
jvalue JNU_CallStaticMethodByName(JNIEnv *mEnv,
                     jboolean *hasException,
                     const char *obj_name, 
                     const char *method_name,
                     const char *descriptor,
                     ...);

//调用某个对象的静态方法(按对象)
jvalue JNU_CallStaticMethodByName(JNIEnv *mEnv,
                     jboolean *hasException,
                     jobject obj, 
                     const char *method_name,
                     const char *descriptor,
                     ...);

//创建一个新对象
jobject JNU_NewClassByName(JNIEnv *mEnv,
                     jboolean *hasException,
                     const char *obj_name, 
                     const char *descriptor,
                     ...);

#endif

⌨️ 快捷键说明

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