JNI包装另一个图书馆

时间:2014-07-28 16:58:22

标签: java c++ java-native-interface wrapper

我是新手,但基本上就是我的情况:我几个月前开发了一个用Kinect运行的Java应用程序。现在我们需要将应用程序迁移到Kinect 2.为此,我必须在现有的Kinect 2 SDK上编写一个包装器。

我2天前开始阅读JNI教程,到目前为止,我可以将自己的C ++代码包装起来,但是当涉及到其他库时我不能,这就是我想要做的:

现在,在转到Kinect 2 SDK之前,我试图对我已经使用过的东西做一个小包装(OpenCV)。我编写了一个小类(只有学习目的),使用C ++编写的OpenCV代码初始化图像。当我尝试构建DLL时一切正常,但是当我尝试使用我的Java代码运行时,我得到“%1不是有效的Win32应用程序”。如果我评论每一行使用OpenCV代码,那么我没有错误,并且可以在我的包装器中运行其他没有OpenCV的函数。

我认为问题是一些不好的配置。

我正在使用的是:

  • Netbeans(Java)
  • Visual Studio 2013(C ++)

1 个答案:

答案 0 :(得分:1)

您的Java机器运行在32位或64位。

您的dll需要与java机器编译在同一台机器上:

  • 如果您在32位Java机器上运行,则需要32位dll(即使系统是x64)
  • 如果您在64位Java机器上运行,则需要64位dll(系统只能是x64)

在visual studio中检查您正在编译dll的平台。它应该与您在netbeans中使用的jre相匹配。