【问题标题】:Java equivalent of IntPtr.ZERO? [duplicate]Java 等价于 IntPtr.ZERO? [复制]
【发布时间】:2012-12-31 19:25:28
【问题描述】:

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

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

我用这个sn-p来表示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)

【问题讨论】:

  • 抱歉,好像是指 IntPtr 而不是 IntPtr.Zero。
  • 我不是在寻找 IntPtr 的等价物,我需要的是 IntPtr.ZERO 的等价物。
  • 我相信null在JNA中通常等同使用。
  • @msandiford 我相信你的回答是正确的。

标签: java intptr


【解决方案1】:

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

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


编辑:回复@Jire 的评论:

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

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

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

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

【讨论】:

  • 我正在尝试编写 Java 软件,它执行本地 Windows 调用以从字节数组运行程序(没有真正的程序命中硬盘)这是我想要转换的内容:@987654322 @ 这是我的 Kernel32 接口(这也定义了结构):pastebin.com/8acqJY8R 这是我的 NtDll 接口:pastebin.com/Q2CgHD37 我遇到的问题是转换 C# 类的函数,我在这里写得最多:pastebin.com/8fUybMc1 看不懂的已经用cmets写了。我的问题大多是重复的。
猜你喜欢
  • 2010-11-30
  • 2018-05-12
  • 2013-10-26
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2012-10-21
  • 2010-09-27
  • 2014-04-03
相关资源
最近更新 更多