Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JNA库使用NetSharedWindows Api时出现无效参数错误_Java_Jna - Fatal编程技术网

Java 使用JNA库使用NetSharedWindows Api时出现无效参数错误

Java 使用JNA库使用NetSharedWindows Api时出现无效参数错误,java,jna,Java,Jna,我试图在我的java代码中使用,在Windows10机器上使用Java8。我正在获取sharename的无效参数错误。我正在使用以下代码: 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.pt

我试图在我的java代码中使用,在Windows10机器上使用Java8。我正在获取sharename的无效参数错误。我正在使用以下代码:

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 NetShared,它也可以工作。但是我无法使用JNA库实现相同的功能。我使用了其他关于网络的JNA功能,但它们工作得很好。请帮助我查找故障。

您在实例化了
共享信息2
结构后,为其填充了Java类字段,但在使用该结构之前,您没有将新字段写入本机内存,因此本机函数看到了空指针和实例化结构的初始值

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

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