JNI可以调MFC写的DLL吗?? 可以调用啊,只要是dll文件都能调用的,我没学过vc,mfc能否写dll我不清楚,我只知道vc或者c++builder可以制作dll文件. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给一个简单例子: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:\winnt\system下就可以了.注意:在用vc编译dll时,要先找到jni.h和jni_md.h放到include里在编译.h文件是注意包的路径问题(如果有的话),否则虽然可以找到dll,但还是会提示找不到方法的!以上只是一点心得,希望对你有帮助,谢谢 这些我都知道的,我想知道,在JNIEXPORT void JNICALL Java_mytest_HelloNative_greeting (JNIEnv env*, jclass cl){ printf("Hello NativeWorld!");}这段程序里,能否用MFC提供的类型和方法,比如:CString类型等等,JNIEXPORT jstring JNICALL Java_mytest_HelloNative_greeting (JNIEnv env*, jclass cl,jstring str){ const char *ch = env->GetStringUTFchars(str,0); CString cs = ch;??????可以吗? printf("Hello NativeWorld!");}要是能用的话,该怎么用?!!不能用的话,也就不在打MFC的注意了!! 好象不可以使用cstring的吧..呵呵使用的数据类型应该都是以j打头的. .class,.h,.c,.dll在同目录下,然后在环境变量中设置path为该目录,在classpath中设置该目录和.dll文件名,运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?我的文件目录如下,在包jnitst中:projectname\src\jnitst\HelloWrold.javaprojectname\classes\jnitst\HelloWrold.classprojectname\classes\jnitst\HelloWrold.hprojectname\classes\jnitst\HelloWroldImp.cprojectname\classes\jnitst\HelloWrold.dll我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found. 要用javah -jni -classpath D;\...\jnitst\ HelloWorld,才能生成头文件. 这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError? struts2 菜鸟求解高手解答,急急急!!!! 关于JPanel的小问题!在JPanel里面放张图片! java语言 跳转问题 Eclipse导入文件后运行不了,是不是要重新设路径啊? 真心求助关于黑莓9500和9530屏幕通用问题(高价报酬) 使用UltraEdit的心得 下周一要去面试,好紧张阿!(来者有分) 如何将JAVA生成EXE文件啊? Java对象与内存 (求教)我想取得OS的系统信息,看了HELP文档,可是还是没搞明白~~~ JSP+Mysql简单问题【100】分
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:\winnt\system下就可以了.
注意:
在用vc编译dll时,要先找到jni.h和jni_md.h放到include里
在编译.h文件是注意包的路径问题(如果有的话),否则虽然可以找到dll,但还是会提示找不到方法的!
以上只是一点心得,希望对你有帮助,谢谢
(JNIEnv env*, jclass cl)
{
printf("Hello NativeWorld!");
}
这段程序里,能否用MFC提供的类型和方法,比如:CString类型等等,JNIEXPORT jstring JNICALL Java_mytest_HelloNative_greeting
(JNIEnv env*, jclass cl,jstring str)
{
const char *ch = env->GetStringUTFchars(str,0);
CString cs = ch;??????可以吗?
printf("Hello NativeWorld!");
}要是能用的话,该怎么用?!!不能用的话,也就不在打MFC的注意了!!
然后在环境变量中设置path为该目录,在classpath中设置该目录和.dll文件名,
运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?
我的文件目录如下,在包jnitst中:
projectname\src\jnitst\HelloWrold.java
projectname\classes\jnitst\HelloWrold.class
projectname\classes\jnitst\HelloWrold.h
projectname\classes\jnitst\HelloWroldImp.c
projectname\classes\jnitst\HelloWrold.dll
我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found.
要用javah -jni -classpath D;\...\jnitst\ HelloWorld,才能生成头文件.
这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError?