在 c++ 中使用 GetMethodID 两次
Using GetMethodID two times at c++
我正在尝试使用 JNI 从 c++ 在 java 调用 2 种不同的方法
我的 C++ 代码是:
int main()
{
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options;
options.optionString="-Djava.class.path=try5.jar";
vm_args.version=JNI_VERSION_1_6;
vm_args.nOptions=1;
vm_args.options=&options;
vm_args.ignoreUnrecognized=0;
int ret=JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);
jclass cls1=env->FindClass("hilla1");
jclass cls=reinterpret_cast<jclass>(env->NewGlobalRef(cls1));
jmethodID constract=env->GetMethodID(cls1,"<init>","()V");
jobject localobj=env->NewObject(cls,constract);
jobject instance=env->NewGlobalRef(localobj);
jclass input = env->FindClass("java/lang/Integer");
char* str="hilla";
jstring string1=env->NewStringUTF(str);
int input2[2]={5,4};
jintArray args=(jintArray)env->NewIntArray(2);
int *input1=input2;
env->SetIntArrayRegion(args,0,2,(jint*)input1);
jmethodID meth = env->GetStaticMethodID(cls, "main1", "([ILjava/lang/String;)V");
env->CallStaticVoidMethod(cls,meth,args,string1);
jmethodID meth1= env->GetStaticMethodID(cls,"main2","(I;)[I");
return 1;}
当我调用main1时,它可以工作,但是当我调用main2时,它给了我meth1 = 0(GetMethodsID失败)
main2 是:
public static int[] main2(int b)
你想要"(I)[I
"不是"(I;)[I
"。(分号仅在 L 之后需要。
我相信有一个工具(javap)可以为你生成这些签名;否则它们可能会很烦人。
C:Program FilesJavajdk1.7.0_45>javap -s -classpath myJar.jar com.package.MyClass
Compiled from "MyClass.java"
public class com.package.MyClass extends java.lang.Object{
public com.package.MyClass();
Signature: ()V
public void setStuff(com.package.Stuff);
Signature: (Lcom/package/Stuff;)V
}
javap
非常有用,但要专注于一种方法,请尝试:
javap -s -public java.lang.String | egrep -A 2 "getBytes"
(如果您需要在Windows上egrep
,则可以安装GOW。
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- C++两次定义相同的函数会导致错误
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- 使用柯南打包时如何避免列出两次依赖?
- 为什么要执行两次位移((x >> 4)<< 4)?
- 对结构向量进行两次排序
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- 在 c++ 中使用 GetMethodID 两次