在Java中使用VC++组件

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

现在,在Visual Studio(和其他任何win32 IDE)创建一个简单的dll工程然后添加上面的.h文件到工程中。

为了获得包含的文件jni.h,添加JRE\INCLUDE文件夹的路径到你的includes中。

现在你会发现在.Java文件中声明的方法的命名,稍微有些不同。

在上面的例子中你会得到:

JNIEXPORT void JNICALL Java_JNITest_showMessage(JNIEnv *, jobject, jstring);

这里,第三个参数是你的从Java中输入的参数。你能转换它成本地的形式如下:

const char *strS1 = env->GetStringUTFChars( s1, 0);

这里,你能够在程序中使用steS1作为C++字符串。在demo程序中我使用了它,把它显示在MessageBox中。有许多JNIEnv的方法,通过这些方法我们可以将多种Java数据类型转换成C++数据类型。

使用完字符串之后必须释放它,字符串不会自用释放。JNI的行为被假设为JVM的外部行为,因此它不会抛任何类型的能够被Java代码捕捉的异常。如果在离开函数前,你忘记了释放字符串,那么这可能会导致你的JVM的crash。

你可以使用函数ReleaseStringUTFChars释放字符串:env->ReleaseStringUTFChars( s1, strS1);

整个代码可能会是这样:

JNIEXPORT void JNICALL Java_JNITest_showMessage( JNIEnv * env, jobject job, jstring str ){ const char *strMsgPtr = env->GetStringUTFChars( str , 0); //Converting string to C++ character pointer

MessageBox( 0, strMsgPtr,”Message box from VC++ “, 0 ); //Using the string

env->ReleaseStringUTFChars( str, strMsgPtr); // Releasing the string ( character pointer )}

现在你可以自由的使用Windows(或VC++)组件做任何事情了??现在你可以使用Windows API了。

编译一个dll然后放在Java程序的文件夹中(这个文件夹包含你的.class文件)。

现在运行你的Java程序。

注意:如果你得到了UnSatisfiedLinkError错误,那么检查你的方法原型,它必须与你在.h文件中提供的一样。

使用JNI你可以在Java程序中使用许多Windows提供的工具。

[1][2]

如果我们想要更多的玫瑰花,就必须种植更多的玫瑰树。

在Java中使用VC++组件

相关文章:

你感兴趣的文章:

标签云: