将VB6类型转换为C#结构

时间:2018-09-17 11:10:24

标签: c# vb6 interop vb6-migration

Public Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

这是我原来的 VB6 代码,转换后的 C#代码是

public struct WIN32_FIND_DATA
{
    long dwFileAttributes;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    long nFileSizeHigh;
    long nFileSizeLow;
    long dwReserved0;
    long dwReserved1;
    cFileName As String * max_path;
    cAlternate As String * 14
}

如何将cFileName As String * max_path转换为C#

1 个答案:

答案 0 :(得分:5)

似乎您想编组这个struct(例如,在调用FindFirstFileExFindNextFile API函数时);如果是你的情况

using System.Runtime.InteropServices;

... 

[StructLayout(LayoutKind.Sequential)]
struct WIN32_FIND_DATA
{
    public uint dwFileAttributes;
    public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
    public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
    public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
    public uint nFileSizeHigh;
    public uint nFileSizeLow;
    public uint dwReserved0;
    public uint dwReserved1;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] // MAX_PATH = 260
    public string cFileName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
    public string cAlternateFileName;
}

有关详细信息,请参见原始的WIN32_FIND_DATA声明