Java相当于IntPtr.ZERO?

时间:2012-12-31 19:25:29

标签: java intptr

  

可能重复:
  What’s the equivalent to IntPtr (C#) in Java?

是否有Java等价的C#的 IntPtr.ZERO ?如果没有,有没有办法在传递给JNA库接口调用时实现相同的行为?

我使用此代码段来表示 IntPtr.ZERO

private static final IntByReference ZERO = new IntByReference(0);

传入此 Kernel32 JNA界面时,我是否会实现相同的行为?:

boolean CreateProcess(String lpApplicationName, String commandLine,
        int processAttributes, int threadAttributes,
        boolean inheritHandles, int creationFlags,
        IntByReference environment, String currentDirectory,
        STARTUPINFO startupInfo, PROCESS_INFORMATION processInformation);

如此: CreateProcess(target, null, 0, 0, false, 4, ZERO, null, sInfo, pInfo)

1 个答案:

答案 0 :(得分:0)

我不是C#程序员,但如果我正确理解IntPtr.ZERO,那么就没有Java等价物。 Java引用可以是null,也可以是赋值,没有第三种情况。

如果你告诉我们你想要完成什么,你认为你需要这个,我们可能会指出你正确的方向(没有双关语)。


编辑:回应@Jire的评论:

很可能有办法直接做你想做的事,但这似乎是一条艰难的道路,通过JNA将NtDll和Kernel32接口直接映射到Java。正如你所发现的那样,它们是两个完全不同的世界,有许多东西不能直接翻译。

我建议编写自己的DLL,它接受来自java应用程序的命令式请求,使用与JNA配合良好的更简单的类型,然后调用相应的本机窗口调用。

请参阅JNA - Mapping Types以获取JNA可以在本机代码和Java之间映射的数据类型列表。

如果您决定必须在没有干预dll的情况下执行此操作,我祝您好运,如果您取得了成功,请发布代码供其他人查看。