如何调用C++编写的dll 我现在有一个C++写成的dll,并知道函数接口请问如何在java中调用?我知道用JNI可以解决不知具体步骤啊? 谢谢!给点大概的提示也好啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己回一个参数中有 HANDLE hHandle 又如何处理 继续顶一个!用JNI封装已有的DLL动态库(只要c能调用的都行,不分微软不微软),也就是有两个DLL,一个是原来的,一个是封装后的现在的问题是 如何用JNI封装原来的DLL啊?????给个简单的例子吧。 请问一下你,什么叫函数接口,是不是头文件啊,因为我也用c++写了一个dll,但是我不知道我的函数接口是什么,跟java中的不一样吧.我是菜鸟一名,教教我,谢谢了,哥哥 public native "returnclass" method(); static{ try{ System.loadLibrary("dllname"); }catch(UnsatisfiedLinkError e){ System.err.println("Cannot load lockpin library:\n " + e.toString()); } } JNI的简要使用例子下面是一个简单的例子实现打印一句话的功能,但是用的c的printf最终实现。一般提供给java的jni接口包括一个so文件(封装了c函数的实现)和一个java文件(需要调用path的类)。1. JNI的目的是使java方法中能够调用c实现的一些函数,比如以下的java类,就需要调用一个本地函数testjni(一般声明为private native类型),首先需要创建文件weiqiong.java,内容如下:class weiqiong{static{System.loadLibrary("testjni");//载入静态库,test函数在其中实现}private native void testjni(); //声明本地调用public void test(){testjni();}public static void main(String args[]){weiqiong haha = new weiqiong();haha.test();}}2.然后执行javac weiqiong.java,如果没有报错,会生成一个weiqiong.class。3.然后执行javah weiqiong,会生成一个文件weiqiong.h文件,其中有一个函数的声明如下:JNIEXPORT void JNICALL Java_weiqiong_testjni(JNIEnv *, jobject);4.创建文件testjni.c将上面那个函数实现,内容如下:#include <stdio.h>#include <weiqiong.h>JNIEXPORT void JNICALL Java_weiqiong_testjni(JNIEnv *env, jobject obj){printf("haha---------go into c!!!n");}5.为了生成.so文件,创建makefile文件如下:libtestjni.so:testjni.o makefilegcc -Wall -rdynamic -shared -o libtestjni.so testjni.otestjni.o:testjni.c weiqiong.hgcc -Wall -c testjni.c -I./ -I/usr/java/j2sdk1.4.0/include -I/usr/java/j2sdk1.4.0/include/linuxcl:rm -rf *.o *.so注意:gcc前面是tab空,j2sdk的目录根据自己装的j2sdk的具体版本来写,生成的so文件的名字必须是loadLibrary的参数名前加“lib”。6.export LD_LIBRARY_PATH=.,由此设置library路径为当前目录,这样java文件才能找到so文件。一般的做法是将so文件copy到本机的LD_LIBRARY_PATH目录下。7.执行java weiqiong,打印出结果:“haha---------go into c!!!” http://www.codeproject.com/java/jnibasics1.asp 求教一个关于图像处理的算法 变颜色的小程序 为什么会报异常呢? 如何使JComboBox中的某一项不能被选中,谢谢 不认为《java编程思想》是一本好书。 问一个简单的调试问题:有包含其它的java包(自己写的)的编译方法 SocketException Connection reset 请问谁能提供 一个 JAVA写的 发邮件程序 很多人碰到的ftp难题 哪里有petstore的详细说明 在applet中如何读取整形数组? 难问题 想试一下java native interface,可是不会c++,不会弄dll,请教。
参数中有 HANDLE hHandle 又如何处理
用JNI封装已有的DLL动态库(只要c能调用的都行,不分微软不微软),也就是有两个DLL,一个是原来的,一个是封装后的现在的问题是 如何用JNI封装原来的DLL啊?????
给个简单的例子吧。
static{
try{
System.loadLibrary("dllname");
}catch(UnsatisfiedLinkError e){
System.err.println("Cannot load lockpin library:\n " + e.toString());
}
}
下面是一个简单的例子实现打印一句话的功能,但是用的c的printf最终实现。一般提供给java的jni接口包括一个so文件(封装了c函数的实现)和一个java文件(需要调用path的类)。
1. JNI的目的是使java方法中能够调用c实现的一些函数,比如以下的java类,就需要调用一个本地函数testjni(一般声明为private native类型),首先需要创建文件weiqiong.java,内容如下:
class weiqiong
{
static
{
System.loadLibrary("testjni");//载入静态库,test函数在其中实现
}
private native void testjni(); //声明本地调用
public void test()
{
testjni();
}
public static void main(String args[])
{
weiqiong haha = new weiqiong();
haha.test();
}
}2.然后执行javac weiqiong.java,如果没有报错,会生成一个weiqiong.class。3.然后执行javah weiqiong,会生成一个文件weiqiong.h文件,其中有一个函数的声明如下:
JNIEXPORT void JNICALL Java_weiqiong_testjni
(JNIEnv *, jobject);4.创建文件testjni.c将上面那个函数实现,内容如下:
#include <stdio.h>
#include <weiqiong.h>
JNIEXPORT void JNICALL Java_weiqiong_testjni
(JNIEnv *env, jobject obj)
{
printf("haha---------go into c!!!n");
}5.为了生成.so文件,创建makefile文件如下:
libtestjni.so:testjni.o makefile
gcc -Wall -rdynamic -shared -o libtestjni.so testjni.o
testjni.o:testjni.c weiqiong.h
gcc -Wall -c testjni.c -I./ -I/usr/java/j2sdk1.4.0/include -I/usr/java/j2sdk1.4.0/include/linux
cl:
rm -rf *.o *.so
注意:gcc前面是tab空,j2sdk的目录根据自己装的j2sdk的具体版本来写,生成的so文件的名字必须是loadLibrary的参数名前加“lib”。6.export LD_LIBRARY_PATH=.,由此设置library路径为当前目录,这样java文件才能找到so文件。一般的做法是将so文件copy到本机的LD_LIBRARY_PATH目录下。7.执行java weiqiong,打印出结果:“haha---------go into c!!!”