将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
(例如在调用FindFirstFileEx
,FindNextFile
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' 类型(同一类)”