C # эквивалент VB6 «Тип» - PullRequest
2 голосов
/ 06 мая 2011

Я пытаюсь портировать довольно большой источник с VB6 на C #. Это нелегкая задача, особенно для меня, который довольно плохо знаком с C # .net. Этот источник использует многочисленные API-интерфейсы Windows, а также многочисленные типы. Я знаю, что не существует эквивалента для типа VB6 в C #, но я уверен, что есть способ достичь того же результата. Я опубликую нижеприведенный код для дальнейшего объяснения моего запроса.

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

Я пытался использовать структуры и классы - но пока не повезло.

Я хотел бы увидеть преобразование этой структуры Типа, но если бы кто-то имел какое-либо представление о том, как преобразовать все это, это было бы невероятно полезно. Я потратил бесчисленные часы на этот маленький проект.

Если это имеет какое-либо значение, это только для образовательных целей.

Спасибо за любую помощь заранее, Evan

Ответы [ 4 ]

9 голосов
/ 06 мая 2011

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 s являются типами значений в C #, что означает, что они всегда передаются по значению. Похоже, вы передаете их в метод, который заполняет их. Если вы хотите использовать это, вам придется использовать классы.

1 голос
/ 06 мая 2011

Я не совсем уверен, в чем ваша проблема, но это небольшой пример того, как использовать структуру.

struct aStrt
{
    public int A;
    public int B;
}

static void Main(string[] args)
{
    aStrt saStrt;
    saStrt.A = 5;
}
0 голосов
/ 06 мая 2011

Может быть, вы пытаетесь получить что-то подобное?

struct IconDirEntry 
{
  public byte Width;
  // etc...
}

IconDirEntry[] tICONDIRENTRY = new IconDireEntry[tICONDIR.idCount - 1];
0 голосов
/ 06 мая 2011

Ваш вопрос неясен ..

С какими проблемами вы сталкиваетесь, когда используете структуру или класс и определяете эти элементы поля?Разве вы не можете получить доступ к этим членам, используя экземпляр, созданный для этого класса?

Иначе, объявите класс статическим и сделайте все члены внутри класса также статическими, чтобы вы могли получить к ним доступ безэкземпляр создается !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...