2012-12-31 148 views
1

可能重复:
What’s the equivalent to IntPtr (C#) in Java?Java等价于IntPtr.ZERO?

是否有相当于Java的C#的IntPtr.ZERO?如果没有,传递给JNA库接口调用时是否有任何方法实现相同的行为?

我使用这个片段代表IntPtr.ZERO:通过成为该的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); 

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

我将实现相同的行为如此: CreateProcess(target, null, 0, 0, false, 4, ZERO, null, sInfo, pInfo)

+1

对不起,看起来像是指IntPtr而不是IntPtr.Zero。 –

+0

我不是在寻找相当于_IntPtr_,我需要相当于_IntPtr.ZERO_。 – Jire

+0

我相信'null'通常在JNA中等价使用。 – msandiford

回答

0

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

如果您向我们展示您正在努力完成的任务,那么您认为您需要这一点,我们可能会指出您朝着正确的方向(无双关语意图)。


编辑:应对来自@Jire评论:

有很可能是一种方法,你直接想要的东西,但它似乎是一个艰难的道路,试图地图NTDLL和的Kernel32接口直接进入Java通过JNA。正如你发现的那样,它们是两个完全不同的世界,有很多东西不直接翻译。

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

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

如果您决定必须在不插入dll的情况下执行此操作,祝您好运,如果您已成功,请发布代码供其他人查看。

+0

我正在尝试编写本地Windows调用来运行程序从字节数组(没有真正的程序击中硬盘驱动器)的Java软件 这是我想要转换的:http://pastebin.com/7Maq937s 这里是我的Kernel32接口(这也定义了结构):http://pastebin.com/8acqJY8R 这是我的NtDll接口:http://pastebin.com/Q2CgHD37 我遇到的问题正在转换C#类的功能,这是我在这里写的最多的:http:// pastebin。com/8fUybMc1 我不明白的是写在评论。我的问题大多是重复的。 – Jire