我正在尝试将一个相当大的源代码从VB6移植到C#。这不是一件容易的事 - 特别是对于我来说是C#.net的新手。此源使用大量Windows API以及许多类型。我知道C#中的VB6类型没有等效,但我确信有一种方法可以达到相同的结果。我将在下面发布一些代码以进一步解释我的请求。
VB6:
Private Type ICONDIRENTRY
bWidth As Byte
bHeight As Byte
bColorCount As Byte
bReserved As Byte
wPlanes As Integer
wBitCount As Integer
dwBytesInRes As Long
dwImageOffset As Long
End Type
Dim tICONDIRENTRY() As ICONDIRENTRY
ReDim tICONDIRENTRY(tICONDIR.idCount - 1)
For i = 0 To tICONDIR.idCount - 1
Call ReadFile(lFile, tICONDIRENTRY(i), Len(tICONDIRENTRY(i)), lRet, ByVal 0&)
Next i
我尝试过使用结构和类 - 但到目前为止没有运气。
我希望看到这种类型结构的转换,但如果有人知道如何转换整个事物,那将是令人难以置信的有用的。我已经在这个小项目上花了无数个小时。
如果它有任何区别,这仅用于教育目的。
感谢您提前提供任何帮助, 埃文
答案 0 :(得分:9)
struct
是等价的。你这样表达:
struct IconDirEntry {
public byte Width;
public byte Height;
public byte ColorCount;
public byte Reserved;
public int Planes;
public int BitCount;
public long BytesInRes;
public long ImageOffset;
}
你声明一个这样的变量:
IconDirEntry entry;
通常,在C#中,不使用类型前缀,也不使用全部大写,除了常量。 struct
是C#中的值类型,因此这意味着它们始终按值传递。看起来你正在将它们传递给一个填充它们的方法。如果您想要这种用法,则必须使用类。
答案 1 :(得分:1)
我不确定你的问题是什么,但这是如何使用结构的一小部分。
struct aStrt
{
public int A;
public int B;
}
static void Main(string[] args)
{
aStrt saStrt;
saStrt.A = 5;
}
答案 2 :(得分:0)
你的问题不明确..
当您使用结构或类并定义这些字段成员时,您遇到了哪些问题?您是否无法使用为该类创建的实例访问这些成员?
否则,将类声明为static并使类中的所有成员也为静态,这样你就可以访问它们而不创建任何实例!!
答案 3 :(得分:0)
也许你想尝试这样的东西?
struct IconDirEntry
{
public byte Width;
// etc...
}
IconDirEntry[] tICONDIRENTRY = new IconDireEntry[tICONDIR.idCount - 1];