1

可能重复:
Java 中的 IntPtr (C#) 等价物是什么?

是否有 C# 的IntPtr.ZERO的 Java 等价物?如果没有,是否有任何方法可以在传递给 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)

4

1 回答 1

0

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

如果您向我们展示您想要完成的工作,您认为您需要这样做的地方,我们可能会为您指明正确的方向(不是双关语)。


编辑:回复@Jire 的评论:

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

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

有关 JNA可以在本机代码和 Java 之间映射的数据类型列表,请参阅JNA - 映射类型。

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

于 2012-12-31T21:10:51.310 回答