我正在尝试将相当大的源代码从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


我已经尝试过使用结构和类-但到目前为止还没有运气。

我希望看到这种Type结构的转换,但是如果有人对如何转换整个事物有任何线索,那将是难以置信的帮助。我已经在这个小项目上花费了无数小时。

如果有任何不同,这仅是出于教育目的。

谢谢您的提前帮助,
埃文

最佳答案

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#中的值类型,这意味着它们始终按值传递。看起来您要将它们传递给填充它们的方法。如果要使用该方法,则必须使用类。

09-11 08:38
查看更多