yuntianao 2017-09-30 01:07 采纳率: 0%
浏览 1216

这段代码如何从C#转到VB.Net

[StructLayout(LayoutKind.Sequential)]
protected struct SHARE_INFO_1
{
[MarshalAs(UnmanagedType.LPWStr)]
public string shi1_netname;
[MarshalAs(UnmanagedType.U4)]
public uint shi1_type;
[MarshalAs(UnmanagedType.LPWStr)]
public string shi1_remark;
}
[DllImport("Netapi32.dll", EntryPoint = "NetShareEnum")]
protected static extern int NetShareEnum(
[MarshalAs(UnmanagedType.LPWStr)] string servername,
[MarshalAs(UnmanagedType.U4)] uint level,
out IntPtr bufptr,
[MarshalAs(UnmanagedType.U4)] int prefmaxlen,
[MarshalAs(UnmanagedType.U4)] out uint entriesread,
[MarshalAs(UnmanagedType.U4)] out uint totalentries,
[MarshalAs(UnmanagedType.U4)] out uint resume_handle
);
private string[] NetShareList(string server)
{

        IntPtr buffer;
        uint entriesread;
        uint totalentries;
        uint resume_handle;

        //-1应该是获取所有的share,返回0表示成功
        if (NetShareEnum(server, 1, out buffer, -1, out entriesread, out totalentries, out resume_handle) == 0)
        {
            Int32 ptr = buffer.ToInt32();
            ArrayList alShare = new ArrayList();
            for (int i = 0; i < entriesread; i++)
            {

                SHARE_INFO_1 shareInfo = (SHARE_INFO_1)Marshal.PtrToStructure(new IntPtr(ptr), typeof(SHARE_INFO_1));
                if (shareInfo.shi1_type == 0)//Disk drive类型
                {
                    alShare.Add(shareInfo.shi1_netname);
                }
                ptr += Marshal.SizeOf(shareInfo);
            }
            string[] share = new string[alShare.Count];
            for (int i = 0; i < alShare.Count; i++)
            {
                share[i] = alShare[i].ToString();
            }
            return share;
        }
        else
            return null;

    }
  • 写回答

1条回答

  • yuntianao 2017-09-30 02:15
    关注
    <StructLayout(LayoutKind.Sequential)>
    Protected Structure SHARE_INFO_1
        <MarshalAs(UnmanagedType.LPWStr)> _
        Public shi1_netname As String
        <MarshalAs(UnmanagedType.U4)> _
        Public shi1_type As System.UInt32
        <MarshalAs(UnmanagedType.LPWStr)> _
        Public shi1_remark As String
    End Structure
    
    <DllImport("Netapi32.dll", EntryPoint:="NetShareEnum")> _
    Protected Shared Function NetShareEnum(<MarshalAs(UnmanagedType.LPWStr)> ByVal servername As String, <MarshalAs(UnmanagedType.U4)> ByVal level As UInteger, ByRef bufptr As IntPtr, _
                                           <MarshalAs(UnmanagedType.U4)> ByVal prefmaxlen As Integer, <MarshalAs(UnmanagedType.U4)> ByRef entriesread As UInteger, _
                                           <MarshalAs(UnmanagedType.U4)> ByRef totalentries As UInteger, <MarshalAs(UnmanagedType.U4)> ByRef resume_handle As UInteger) As Integer
    End Function
    
    
    Private Function NetShareList(ByVal server As String) As String()
        Dim buffer As IntPtr
        Dim entriesread As UInteger
        Dim totalentries As UInteger
        Dim resume_handle As UInteger
        '-1应该是获取所有的share,返回0表示成功
        If (NetShareEnum(server, 1, buffer, -1, entriesread, totalentries, resume_handle) = 0) Then
            Dim ptr As Integer = buffer.ToInt32
            Dim alShare As ArrayList = New ArrayList()
            For i As Integer = 0 To entriesread - 1
                Dim shareInfo As SHARE_INFO_1 = DirectCast(Marshal.PtrToStructure(New IntPtr(ptr), GetType(SHARE_INFO_1)), SHARE_INFO_1)
                If (shareInfo.shi1_type = 0) Then    'Disk drive类型
                    alShare.Add(shareInfo.shi1_netname)
                End If
                ptr += Marshal.SizeOf(shareInfo)
            Next
            Dim share As String() = New String(alShare.Count) {}
            For i As Integer = 0 To alShare.Count - 1
                share(i) = alShare(i).ToString()
            Next
            Return share
        Else
            Return Nothing
        End If
    End Function
        已经转换成功
    
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?