Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C调用(通过JNI)调用DLL的Java(通过SWIG)_Java_C_Java Native Interface_Swig - Fatal编程技术网

C调用(通过JNI)调用DLL的Java(通过SWIG)

C调用(通过JNI)调用DLL的Java(通过SWIG),java,c,java-native-interface,swig,Java,C,Java Native Interface,Swig,我使用JNI对Java类进行C调用。 其中一个Java类加载一个DLL,并使用SWIG生成的代码调用该DLL 问题是:当我在C中调用调用DLL的Java类时,我什么也得不到,它不工作 不幸的是,我看不到背后的错误 我怎样才能解决这个问题? 谢谢大家! 以下是我使用的代码: /* * java method that loads the DLL and that is called from C * in the function "createInstance"(see below) */

我使用JNI对Java类进行C调用。 其中一个Java类加载一个DLL,并使用SWIG生成的代码调用该DLL

问题是:当我在C中调用调用DLL的Java类时,我什么也得不到,它不工作

不幸的是,我看不到背后的错误

我怎样才能解决这个问题? 谢谢大家!

以下是我使用的代码:

 /*
 * java method that loads the DLL and that is called from C
 * in the function "createInstance"(see below)
*/
public void loadIsystem(){
    System.load("c:\\_MksProj\\TestHarness\\lib\\IConnectJNI.dll");
    //System.loadLibrary(IConnectJNI);
    ConnectionMgr connection = new ConnectionMgr();
}

/*
 * the ConnectionMgr constructor
 * makes a call to the SWIG created wrapper "connectJNI"
 * and constructs the object. The most recently DLL is used.
 * here the call gets broken
 */
  public ConnectionMgr() {
      this(connectJNI.new_ConnectionMgr__SWIG_0(), true);
      //System.out.println("connectJNI.new_ConnectionMgr__SWIG_0()");
  }


  /*C code that calls the Java method(the env var is already instantiated)
  *the call gets broken when the "connection" instance is created:
  *ConnectionMgr connection = new ConnectionMgr();
  *in the loadSystem method
  */
  jobject createInstance(JNIEnv* env, char * className, char * contsructorSignature, ...)
  {
    jclass myclz = (*env)->FindClass(env, className);
    jmethodID cons = (*env)->GetMethodID(env, myclz, "<init>", contsructorSignature);
    jobject scObject = (*env)->NewObject(env, myclz, cons);

    printf("class: %d\n", myclz);
    printf("constructor: %d\n", cons);
    printf("instance: %d\n", scObject);

    jmethodID scMethod1 = (*env)->GetMethodID(env, myclz, "loadIsystem", "()V");
    (*env)->CallVoidMethod(env, scObject, scMethod1);

    return scObject;
  }
/*
*加载DLL并从C调用的java方法
*在函数“createInstance”中(见下文)
*/
公共void loadIsystem(){
加载(“c:\\\\U MksProj\\TestHarness\\lib\\IConnectJNI.dll”);
//系统加载库(IConnectJNI);
ConnectionMgr connection=new ConnectionMgr();
}
/*
*ConnectionMgr构造函数
*调用SWIG创建的包装“connectJNI”
*并构造对象。使用了最新的DLL。
*这里电话中断了
*/
公共连接mgr(){
这是(connectJNI.new_ConnectionMgr_uuuswig_0(),true);
//System.out.println(“connectJNI.new\u ConnectionMgr\u\u SWIG\u 0()”;
}
/*调用Java方法的C代码(env变量已经实例化)
*创建“连接”实例时,调用中断:
*ConnectionMgr connection=new ConnectionMgr();
*在loadSystem方法中
*/
jobject createInstance(JNIEnv*env,char*className,char*contsructorSignature,…)
{
jclass myclz=(*env)->FindClass(env,className);
jmethodID cons=(*env)->GetMethodID(env,myclz,“”,contsructorSignature);
jobject scoobject=(*env)->NewObject(env、myclz、cons);
printf(“类:%d\n”,myclz);
printf(“构造函数:%d\n”,cons);
printf(“实例:%d\n”,scObject);
jmethodID scMethod1=(*env)->GetMethodID(env,myclz,“loadIsystem”,“()V”);
(*env)->CallVoidMethod(env,scObject,scMethod1);
返回scObject;
}
可能与此问题有关:

你能提供更多的信息吗?你得说得更具体一些:“我什么也得不到,它不起作用”这句话太含糊了。你能列出你正在采取的步骤和每个步骤的输出吗?我已经添加了更多与此相关的信息并更新了问题,谢谢