将VB6类型转换为C#struct

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将VB6类型转换为C#struct相关的知识,希望对你有一定的参考价值。

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#

答案

看来你想编组这个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声明

以上是关于将VB6类型转换为C#struct的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 COM-interop 从 C# 库中附加 vb6 中的对象时,获取“无法将 'Field' 转换为 'Field' 类型(同一类)”

无法将 [Struct] 类型的值快速转换为 [string] 类型

将 char* 转换为 struct

在代码片段中包含类型转换

Python之struct

在 Scala 中将 Struct 数据类型转换为 Map 数据类型