4 votes

Équivalent en C# du "Type" en VB6

J'essaie de porter une source assez importante de VB6 à C#. Ce n'est pas une tâche facile - surtout pour moi qui suis assez novice en C#.net. Cette source utilise de nombreuses API Windows ainsi que de nombreux Types. Je sais qu'il n'y a pas de équivalent au type VB6 en C# mais je suis sûr qu'il y a un moyen d'arriver au même résultat. Je vais poster un peu de code ci-dessous pour expliquer ma demande.

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

J'ai essayé d'utiliser des structures et des classes, mais sans succès jusqu'à présent.

J'aimerais voir une conversion de cette structure de type, mais si quelqu'un avait une idée de la façon de convertir l'ensemble, ce serait incroyablement utile. J'ai déjà passé d'innombrables heures sur ce petit projet.

Si cela peut faire une différence, c'est uniquement à des fins éducatives.

Merci d'avance pour toute aide, Evan

11voto

recursive Points 34729

struct est l'équivalent. On peut l'exprimer de la manière suivante :

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;
}

Vous déclarez une variable comme ceci :

IconDirEntry entry;

En règle générale, en C#, les préfixes de type ne sont pas utilisés, pas plus que les majuscules, sauf éventuellement pour les constantes. struct sont des types de valeur en C#, ce qui signifie qu'ils sont toujours transmis par valeur. Il semble que vous les transmettiez à une méthode qui les remplit. Si vous souhaitez cette utilisation, vous devrez utiliser des classes.

1voto

rerun Points 15285

Je ne sais pas exactement quel est votre problème, mais voici un petit exemple de l'utilisation d'une structure.

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

static void Main(string[] args)
{
    aStrt saStrt;
    saStrt.A = 5;
}

0voto

Archana Points 74

Votre question n'est pas claire.

Quels sont les problèmes que vous rencontrez lorsque vous utilisez une structure ou une classe et que vous définissez les membres de ces champs ? N'êtes-vous pas en mesure d'accéder à ces membres en utilisant une instance créée pour cette classe ?

Sinon, déclarez la classe comme statique et faites en sorte que tous les membres à l'intérieur de la classe soient également statiques, de sorte que vous puissiez y accéder sans qu'aucune instance ne soit créée !

0voto

Petr Abdulin Points 7297

Peut-être essayez-vous d'obtenir quelque chose comme cela ?

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

IconDirEntry[] tICONDIRENTRY = new IconDireEntry[tICONDIR.idCount - 1];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X