![](/img/trans.png)
[英]How to pass a pointer to a struct array to a function in java using JNA?
[英]How to pass a Environment Pointer to Windows CreateProcess in Java (using jna)
我正在调用Kernel32.Instance.CreateProcess
来启动一个分离的进程。 我面临的一个问题是每次执行此过程时都尝试将环境块传递给CreateProcess
。
我第一次用
Advapi32Util.getEnvironmentBlock(environment)
创建块,然后创建一个指针( CreateProcess
需要(我用过:
public static Pointer asPointer(String string) {
byte[] data;
try {
data = Native.toByteArray(string, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
Pointer pointer = new Memory(data.length + 1);
pointer.write(0, data, 0, data.length);
pointer.setByte(data.length, (byte) 0);
return pointer;
}
我认为最终会产生双重空值。 我确实设置了CREATE_UNICODE_ENVIRONMENT,所以我尝试在Memory
的末尾添加两个额外的空值。 这仍然导致CreateProcess
返回false而不是启动命令。
我不明白我做错了什么。 我应该检查可能暗示问题的日志文件吗?
啊所以在使用CREATE_UNICODE_ENVIRONMENT
它需要采用UTF-16LE
byte[]
。 确保每个key=value
后跟两个空值aka (byte) 0)
。 最后添加两个空字节。 指针可以如上所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.