Вход на сайт
JNI Invocation API
122
NEW 22.11.06 09:45
Кто-нить уже пользовался сабжем? http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/invocation.html#wp9502
NEW 22.11.06 11:23
Чего там определено, вот это?
class _jstring : public _jobject {};
class _jarray : public _jobject {};
И что это тебе даёт?
Вот для примера, как будет выглядеть вызов функции через JNI (то, что у меня просто генерировалось):
В ответ на:
bool Collection::add( const Object& p0 )
{
JNIEnv* env = Jvm::get().getEnv();
static jmethodID this_method = 0;
if ( !this_method )
{
this_method = env->GetMethodID( this_class_.getClass(CLASS_NAME), "add", "(Ljava/lang/Object;)Z" );
if ( !this_method )
check_throw( env, "Method add in class Collection not found" );
}
bool result = env->CallBooleanMethod( jref_, this_method, p0.getJObjectValue() ) != 0;
check( env, "Method add in class Collection failed" );
return result;
}
NEW 23.11.06 20:31
в ответ scorpi_ 23.11.06 20:22
Код практически из туториала. Типа такого: http://www.inonit.com/cygwin/jni/invocationApi/launch.html
ВМ загружается, класс находится. Когда запускаю main - прога по-тихому умирает.
ВМ загружается, класс находится. Когда запускаю main - прога по-тихому умирает.
23.11.06 20:38
в ответ Simple 23.11.06 20:31
Я причин уже не помню, но у меня инициализационный код выглядел так -
void JVM::create()
{
library_handle_ = LoadLibrary( jvm_path_.c_str() );
if ( !library_handle_ )
throw ccm_error( std::string( "Can't load JVM from " + jvm_path_ ).c_str() );
createJavaVMPtr = (CreateJavaVM_t) GetProcAddress( library_handle_, "JNI_CreateJavaVM" );
if ( ! createJavaVMPtr )
throw ccm_error( std::string("Can't find JNI_CreateJavaVM in " + jvm_path_).c_str() );
env_ = 0;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
std::string cl_path = "-Djava.class.path=" + class_path_;
options[0].optionString = const_cast<char*>( cl_path.c_str() );
vm_args.version = 0x00010002;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_TRUE;
if ( createJavaVMPtr( &jvm_, reinterpret_cast<void**>(&env_), &vm_args ) < 0 )
throw ccm_error( "Cannot create JVM" );
if ( !env_ || !jvm_ )
throw ccm_error( "Cannot initialize JVM" );
}