是否有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)
答案 0 :(得分:0)
我不是C#程序员,但如果我正确理解IntPtr.ZERO,那么就没有Java等价物。 Java引用可以是null,也可以是赋值,没有第三种情况。
如果你告诉我们你想要完成什么,你认为你需要这个,我们可能会指出你正确的方向(没有双关语)。
编辑:回应@Jire的评论:
很可能有办法直接做你想做的事,但这似乎是一条艰难的道路,通过JNA将NtDll和Kernel32接口直接映射到Java。正如你所发现的那样,它们是两个完全不同的世界,有许多东西不能直接翻译。
我建议编写自己的DLL,它接受来自java应用程序的命令式请求,使用与JNA配合良好的更简单的类型,然后调用相应的本机窗口调用。
请参阅JNA - Mapping Types以获取JNA可以在本机代码和Java之间映射的数据类型列表。
如果您决定必须在没有干预dll的情况下执行此操作,我祝您好运,如果您取得了成功,请发布代码供其他人查看。