通过JNI调用matlab

原创 2008年09月30日 10:58:00
 

生成头文件:依据java文件的声明生成相应的头文件

Java文件:test.pinpu.java

public native static double[] getF(double[] x,double[] y);//求频率

public native static double[] getFuzhi(double[] y);//求幅值

H文件:test_pinpu.h

JNIEXPORT jdoubleArray JNICALL Java_test_pinpu_getF

  (JNIEnv *, jclass, jdoubleArray, jdoubleArray);

JNIEXPORT jdoubleArray JNICALL Java_test_pinpu_getFuzhi

  (JNIEnv *, jclass, jdoubleArray);

生成DLL文件:在VC下生成DLL文件的需要引进的头文件:JAVAjni.hjni_md.h和自己生成的头文件test_pinpu.h;需要引进的matlab库文件:libmx.liblibeng.liblibmat.lib

 

JNIEXPORT jdoubleArray JNICALL Java_test_pinpu_getFuzhi
(JNIEnv *env, jclass, jdoubleArray p){
    Engine *ep;
    if(!(ep=engOpen(NULL))){AfxMessageBox("不能打开matlabengine");}
    jint n=env->GetArrayLength(p);
    jdouble *pp=env->GetDoubleArrayElements(p,0);
    mxArray *T=NULL;
    T=mxCreateDoubleMatrix(1,n,mxREAL);
    memcpy((char*)mxGetPr(T),(char*)pp,n*sizeof(double));
  
    engPutVariable(ep,"x",T);
    engEvalString(ep,"xk=fft(x)");
    engEvalString(ep,"m=abs(xk)");
    mxArray *pf=engGetVariable(ep,"m");
    int line=mxGetM(pf);
    int colum=mxGetN(pf);
    double* k = (double*)mxGetPr(pf);
    jdoubleArray tg=env->NewDoubleArray(line*colum);
    env->SetDoubleArrayRegion(tg,0,line*colum,k); 
    engClose(ep);
    return tg;   
}

调用DLL文件:

将生成的Matlab7Pinpu.dll文件位置放在jrebin下;

导入DLL文件:static{System.loadLibrary("Matlab7Pinpu");}

调用方法声明: public native static double[] getFuzhi(double[] y);

接着就可以调用相应的方法,至此就完成了java对于Matlab引擎的调用。

通过JNI调用matlab

通过JNI调用matlab
  • hjguan
  • hjguan
  • 2011年03月23日 19:58
  • 663

Java JNI 调用C#方法

 在编写Java应用程序当中,可以利用C或者CPP来编写DLL函数,然后再Java当中进行调用,从而实现对本地API的调用,这两天因为业务需要,要利用Java调用C#函数。于是研究了一下,发现可以通过...
  • sweetwxh
  • sweetwxh
  • 2008年07月30日 13:22
  • 6924

JAVA通过JNI调用C++函数详解

看到一篇讲述JNI调用C++代码的文章,写的非常详细,转载了。转载自:http://www.ibm.com/developerworks/cn/java/jnimthds/,感谢作者的辛勤付出。 ...
  • mfcing
  • mfcing
  • 2015年02月25日 18:12
  • 3421

使用JNI 调用第三方c++动态库

昨天晚上到今天一直在折腾这个第三方库文件,唉,要哭了,一直就是各种问题。现在详细说说怎么做,踩过哪些坑。...
  • u014006343
  • u014006343
  • 2016年08月13日 17:29
  • 2305

学习JNI--Android下使用JNI调用C

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java...
  • cyp331203
  • cyp331203
  • 2014年10月23日 17:28
  • 1506

JNI函数调用大全

转自这里写链接内容 Chap1:JNI完全手册 3 Chap2:JNI-百度百科 11 Chap 3:javah命令帮助信息 16 Chap 4:用javah产生一个.h文件 17...
  • sbf2011
  • sbf2011
  • 2015年04月27日 23:10
  • 789

Java通过JNI调用C++的DLL库

Java通过JNI调用C++程序, 在VS2015实现。
  • jia20003
  • jia20003
  • 2016年09月28日 19:15
  • 2752

Java通过JNI调用C的一个小DEMO

最近看java源代码,发现很多方法用native修饰,那么什么事native方法呢?     简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Met...
  • cl05300629
  • cl05300629
  • 2014年09月04日 12:47
  • 5971

JNI java调用动态链接库dll

#include #include JNIEXPORT void JNICALL JAVA_ConDll_open(JNIEnv *env,jobject obj);          生成的头文件...
  • lishuangzhe7047
  • lishuangzhe7047
  • 2015年05月28日 22:19
  • 8238

eclipse上java项目通过jni调用dll动态库

今天研究了一下jni调用dll的问题,参考了网上一些文章(以下是帮助最大的),最后终于成功了: http://www.myexception.cn/eclipse/1338831.html http:...
  • scl365
  • scl365
  • 2014年03月31日 19:24
  • 1807
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过JNI调用matlab
举报原因:
原因补充:

(最多只允许输入30个字)