34 JNI_context const & jni, rtl_uString ** out_ustr, jstring jstr )
38 rtl_uString_new( out_ustr );
42 jsize len = jni->GetStringLength( jstr );
43 std::unique_ptr< rtl_mem > mem(
45 sizeof (rtl_uString) + (len *
sizeof (
sal_Unicode)) ) );
46 rtl_uString * ustr =
reinterpret_cast<rtl_uString *
>(mem.get());
47 jni->GetStringRegion( jstr, 0, len,
reinterpret_cast<jchar *
>(ustr->buffer) );
51 ustr->buffer[ len ] =
'\0';
54 if (
nullptr != *out_ustr)
55 rtl_uString_release( *out_ustr );
63 rtl_uString * ustr =
nullptr;
65 return OUString( ustr, SAL_NO_ACQUIRE );
71 jstring jstr = jni->NewString(
reinterpret_cast<jchar
const *
>(ustr->buffer), ustr->length );
80 JNI_context const & jni,
char const * class_name,
bool inException =
false )
86 if (info ==
nullptr) {
98 return jni.
findClass(class_name, c,
m, inException);
107 jobject jo_type = jni->NewObjectA(
114 JNI_context const & jni, typelib_TypeDescriptionReference * type )
121 jni, jni->CallStaticObjectMethodA(
128 args[ 0 ].l = jo_type_name.
get();
129 args[ 1 ].l = jo_type_class.
get();
130 jobject jo_type = jni->NewObjectA(
142 jobject jo_oid = jni->CallStaticObjectMethodA(
jclass findClass(char const *name, jclass classClass, jmethodID methodForName, bool inException) const
JNI_info const * get_info() const
void ensure_no_exception() const
void getClassForName(jclass *classClass, jmethodID *methodForName) const
jclass m_class_UnoRuntime
jmethodID m_method_Class_forName
jmethodID m_method_TypeClass_fromInt
jmethodID m_ctor_Type_with_Name_TypeClass
jmethodID m_method_UnoRuntime_generateOid
jmethodID m_ctor_Type_with_Class
OUString jstring_to_oustring(JNI_context const &jni, jstring jstr)
void jstring_to_ustring(JNI_context const &jni, rtl_uString **out_ustr, jstring jstr)
jstring ustring_to_jstring(JNI_context const &jni, rtl_uString const *ustr)
jclass find_class(JNI_context const &jni, char const *class_name, bool inException=false)
jobject create_type(JNI_context const &jni, jclass clazz)
jobject compute_oid(JNI_context const &jni, jobject jo)
static rtl_mem * allocate(std::size_t bytes)