c# - 将 VB6 类型转换为 C# 结构

标签 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#

最佳答案

您似乎想要编码这个结构(例如,当调用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详情声明

关于c# - 将 VB6 类型转换为 C# 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52366417/

相关文章:

c# - 在 ASP.NET 4.0 中通过 Web.config 配置 NHibernate

com - 什么可能导致 Vb6 运行时错误 430

c# - 当它的一些参数是委托(delegate)时,是否可以在 C# 中使用 "C++ Library Function"?

c# - WCF 消息安全实际上是否加密消息内容?

c# - 在绑定(bind)的 DataGridview 中添加自己的列

c# - 无法从 int 转换为 char 错误 c#

vb6 - 为什么我的应用程序会触发另一个应用程序的安装程序?

VB6 + 如何通过按钮在表单中的窗口/框架之间切换

c# - 如果/当 DllImport 被多次调用时会发生什么?

C# MS Project Interop - 获取资源的工作时间