当前位置: 技术问答>java相关
JNI可以调MFC写的DLL吗??
来源: 互联网 发布时间:2015-10-21
本文导语: JNI可以调MFC写的DLL吗?? 我需要将一段用MFC写的代码,转换到JAVA里来 我用JNI来做,可不知道MFC能不能来写DLL?写好的DLL在JNI里能调用吗? 请高手指点一下!! 谢谢,肯定有分!! | 给一个简单例子: packa...
JNI可以调MFC写的DLL吗??
我需要将一段用MFC写的代码,转换到JAVA里来
我用JNI来做,可不知道MFC能不能来写DLL?写好的DLL在JNI里能调用吗?
请高手指点一下!!
谢谢,肯定有分!!
我需要将一段用MFC写的代码,转换到JAVA里来
我用JNI来做,可不知道MFC能不能来写DLL?写好的DLL在JNI里能调用吗?
请高手指点一下!!
谢谢,肯定有分!!
|
给一个简单例子:
package mytest;
public class HelloNative
{ //要调用的本地方法声明为native
public native static void greeting();
static
{
System.loadLibrary("newPrintfDll");
}
}
主类如下:
package mytest;
import mytest.*;
public class HelloNativeTest
{
public static void main(String[] args)
{
HelloNative.greeting();
}
}
首先,你要编译有native方法的那个文件,生成class文件,然后,使用jdk自带的命令javah编译该类文件,生成.h文件,生成的.h文件的关键代码如下:
JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting
(JNIEnv env*, jclass cl);//稍微改了改
用vc或者c++builder做一个dll文件,跟着winzard做,不难,将这段代码拷贝到cpp文件里(用vc做时),然后再在下面写出你要的代码如
JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting
(JNIEnv env*, jclass cl)
{
printf("Hello NativeWorld!");
}
编译生成dll,放到c:winntsystem下就可以了.
注意:
在用vc编译dll时,要先找到jni.h和jni_md.h放到include里
在编译.h文件是注意包的路径问题(如果有的话),否则虽然可以找到dll,但还是会提示找不到方法的!
以上只是一点心得,希望对你有帮助,谢谢
package mytest;
public class HelloNative
{ //要调用的本地方法声明为native
public native static void greeting();
static
{
System.loadLibrary("newPrintfDll");
}
}
主类如下:
package mytest;
import mytest.*;
public class HelloNativeTest
{
public static void main(String[] args)
{
HelloNative.greeting();
}
}
首先,你要编译有native方法的那个文件,生成class文件,然后,使用jdk自带的命令javah编译该类文件,生成.h文件,生成的.h文件的关键代码如下:
JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting
(JNIEnv env*, jclass cl);//稍微改了改
用vc或者c++builder做一个dll文件,跟着winzard做,不难,将这段代码拷贝到cpp文件里(用vc做时),然后再在下面写出你要的代码如
JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting
(JNIEnv env*, jclass cl)
{
printf("Hello NativeWorld!");
}
编译生成dll,放到c:winntsystem下就可以了.
注意:
在用vc编译dll时,要先找到jni.h和jni_md.h放到include里
在编译.h文件是注意包的路径问题(如果有的话),否则虽然可以找到dll,但还是会提示找不到方法的!
以上只是一点心得,希望对你有帮助,谢谢
|
.class,.h,.c,.dll在同目录下,
然后在环境变量中设置path为该目录,在classpath中设置该目录和.dll文件名,
运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?
我的文件目录如下,在包jnitst中:
projectnamesrcjnitstHelloWrold.java
projectnameclassesjnitstHelloWrold.class
projectnameclassesjnitstHelloWrold.h
projectnameclassesjnitstHelloWroldImp.c
projectnameclassesjnitstHelloWrold.dll
我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found.
要用javah -jni -classpath D;...jnitst HelloWorld,才能生成头文件.
这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError?
然后在环境变量中设置path为该目录,在classpath中设置该目录和.dll文件名,
运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?
我的文件目录如下,在包jnitst中:
projectnamesrcjnitstHelloWrold.java
projectnameclassesjnitstHelloWrold.class
projectnameclassesjnitstHelloWrold.h
projectnameclassesjnitstHelloWroldImp.c
projectnameclassesjnitstHelloWrold.dll
我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found.
要用javah -jni -classpath D;...jnitst HelloWorld,才能生成头文件.
这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError?
|
可以调用啊,只要是dll文件都能调用的,我没学过vc,mfc能否写dll我不清楚,我只知道vc或者c++builder可以制作dll文件.