首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NuiGetSensorCount Java JNA

NuiGetSensorCount Java JNA
EN

Stack Overflow用户
提问于 2013-08-28 12:45:26
回答 1查看 258关注 0票数 0

我正在学习如何使用Java JNA,并且我正在尝试从Microsoft Kinect SDK调用一个简单的函数。(NuiGetSensorCount),它只返回连接的kinects的数量。

这是我的尝试:

代码语言:javascript
复制
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;

public class Driver {
    public interface KinectLibrary extends Library {
    KinectLibrary INSTANCE = (KinectLibrary)Native.loadLibrary(("Microsoft.Kinect"),KinectLibrary.class);

        //_Check_return_ HRESULT NUIAPI NuiGetSensorCount( _In_ int * pCount );
        NativeLong NuiGetSensorCount(Pointer pCount);
    }

    public static void main(String[] args) {
        Pointer devCount = new Pointer(0);
        KinectLibrary.INSTANCE.NuiGetSensorCount(devCount);
        System.out.println("Devices:"+devCount.getInt(0));
    }
}

但我得到了:

代码语言:javascript
复制
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'NuiGetSensorCount': The specified procedure could not be found.

at com.sun.jna.Function.<init>(Function.java:208)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:536)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:513)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:499)
at com.sun.jna.Library$Handler.invoke(Library.java:199)
at $Proxy0.NuiGetSensorCount(Unknown Source)
at Driver.main(Driver.java:30)

有没有人能帮我修改我的代码,让它找到正确的本机函数?我还提供了一些信息/参考,以便我可以尝试自己调试它(一些方法来查看Java JNA正在寻找的函数,并将其与.dll包含的函数进行比较)

EN

回答 1

Stack Overflow用户

发布于 2013-08-28 23:43:11

我想通了我的问题。首先,我使用一个名为dependency walker http://dependencywalker.com/的程序查看DLL中的所有符号,并确定我正在使用的DLL (Microsoft.Kinect.dll)实际上并不包含我试图调用的函数。我发现Kinect10.dll正是我需要的。在改变它之后,我不得不对我的指针做了一个小的改变,它完美地工作了!

这是固定的代码。

代码语言:javascript
复制
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.StdCallLibrary;

    public class Driver{
    public interface KinectLibrary extends StdCallLibrary {
        KinectLibrary INSTANCE = (KinectLibrary)Native.loadLibrary(("Kinect10"),KinectLibrary.class);

        //_Check_return_ HRESULT NUIAPI NuiGetSensorCount( _In_ int * pCount );
        NativeLong NuiGetSensorCount(IntByReference pCount);
    }
    public static void main(String[] args) {
        IntByReference a = new IntByReference();
        KinectLibrary.INSTANCE.NuiGetSensorCount(a);
        System.out.println("Devices:"+a.getValue());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18479631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档