gpt4 book ai didi

java - 使用 JNA 库使用 NetShareAdd windows Api 时出现无效参数错误

转载 作者:行者123 更新时间:2023-11-30 05:20:35 31 4
gpt4 key购买 nike

我正在尝试使用NetShareAdd Windows API在我的java代码中使用 JNA library - 5.5.0,JNA Platform -5.5.0 ,在使用 Java 8 的 Windows 10 计算机上。我收到共享名的无效参数错误。我正在使用以下代码:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.LMAccess;
import com.sun.jna.platform.win32.LMShare;
import com.sun.jna.platform.win32.Netapi32;
import com.sun.jna.ptr.IntByReference;

import java.io.File;

public class JNATest {

public static void createLocalShare(File shareFolder)
{
TestwareLMShare.SHARE_INFO_2 shi = new TestwareLMShare.SHARE_INFO_2();
shi.shi2_netname = shareFolder.getName();
shi.shi2_type = LMShare.STYPE_DISKTREE;
shi.shi2_remark = "";
shi.shi2_permissions = LMAccess.ACCESS_ALL;
shi.shi2_max_uses = -1;
shi.shi2_current_uses = 0;
shi.shi2_path = shareFolder.getAbsolutePath();
shi.shi2_passwd = "";
IntByReference parm_err=new IntByReference();
Pointer pointer=shi.getPointer();
int result= Netapi32.INSTANCE.NetShareAdd(null,2,shi.getPointer(),parm_err); // share folder in local system
System.out.println("errorcode:"+result);//errorcode 87 -invalid parameter
System.out.println("parameter:"+parm_err.getValue());// 1 - shi2_netname is invalid
}
public static void main(String args[])
{
File file=new File("e:\\testfolder"); // folder present in local system
createLocalShare(file);
}
}

输出:

errorcode:87
parameter:1

我已经在 Windows 命令提示符中使用 net share testfolder=e:\testfolder 检查过,它有效。我还在cpp程序中直接测试了Windows API NetShareAdd,它也可以工作。但我无法使相同的功能与 JNA 库一起使用。我已经使用了其他有关网络的 JNA 功能,但它们工作正常。请帮我找出错误。

最佳答案

实例化 SHARE_INFO_2 结构后,您已填充该结构的 Java 类字段,但在使用该结构之前尚未将新字段写入 native 内存,因此 native 函数看到 null指针和实例化结构的初始值。

当方法映射使用 Structure 类时,Java 到 native 的写入会自动完成。然而,在这种情况下,NetShareAdd()方法需要一个Pointer(因为可以使用多个不同的类)。 JNA 不知道指针从哪里来,也不知道缓冲区有多大等,因此在您进行 java 端更改后,它无法自动将内存复制到 native 端。

在设置 shi 的所有 Java 端值后添加 shi.write() 会将数据复制到 native 内存,然后您的缓冲区将包含数据和该方法需要的指针。

关于java - 使用 JNA 库使用 NetShareAdd windows Api 时出现无效参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59646330/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com