Laden...

VB private Type nach c# portieren

Erstellt von et-thomas vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.464 Views
E
et-thomas Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren
VB private Type nach c# portieren

Hallo zusammen,

ich habe eine größere Struktur, die auch Arrays enthält in VB bzw. C++.

Diese möchte ich nun nach C# portieren. Hat da jemand eine Idee, wie ich das prinzipiell machen kann? Ich habe einfach eine neue Struktur angelegt und dort die Variablen aufgelistet, natürlich die größe angepasst (aus short wird int etc.). Einziges Manko habe ich nun bei den byte Arrays...Da weiß ich nicht, wie ich in der Struktur 63Bytes hintereinander bekomme - byte[] mybyte[63] geht in c# ja leider nicht...

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo et-thomas!

byte[] mybyte[63] geht in c# ja leider nicht

Wieso nicht?

Ist denn


byte[] mybyte = new byte[63];

nicht das gleiche? Wenn doch, dann freue ich mich Dir geholfen zu haben 😉

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

E
et-thomas Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren

Ja; es ist das gleiche. Aber das kann ich nur machen, nachdem ich eh schon Speicher, bzw. die Struktur inintiiert habe.

Würde das gern direkt in der Struktur anlegen...

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo et-thomas!

Wenn es um ein Dynamisch großes Array handeln soll, dann solltest Du auch solche verwenden.

Nimm doch zum Beispiel eine ArrayList. (Da solltest Du noch zusätzlich using System.Collection; mit übernehmen).

Diese ArrayList kann man mit meineListe.Add() mit beliebigen objekten füllen. So auch mit byte variablen.

Das sieht dann so aus (ungetestet):


// struktur definieren
struct MeinStruct
{
   public ArrayList meineListe = new ArrayList();
}

// einige variablen definieren
MeinStruct dataset = new MeinStruct();
byte var = 123;

// arrayListe befüllen
dataset.meineListe.Add(var);

// daten aus ArrayList holen
var = (byte) meineListe[0];


Das sollte das erfüllen, was Du vor hast 😉

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

S
8.746 Beiträge seit 2005
vor 18 Jahren

Es gibt tatsächlich keine Fix-Length-Arrays unter C#, anders als z.B. in Sprachen wie C++. Arrays definieren ihre Länge erst mit dem Anlegen, also dynamisch.

Um z.B. C++-Strukturen mit solchen Arrays trotzdem automatisch nach C# wandeln zu können und zurück, gibt es die MarshalAs-Angabe, mit der man die Array-Länge festlegen kann:

 
[StructLayout(LayoutKind.Sequential)]
public struct MyStruct
{
    public int eineZahl;
    [MarshalAs( UnmanagedType.ByValArray, SizeConst=5 )]
    public byte[] fixByteArray;
}

Achtung: Natürlich muss beim Anlegen des Array die feste Größe 5 beachtet werden. Die Marshal-As-Angabe hat nur Wirkung bei beim MArshalling von unmanaged in managed Speicher, also z.B. wenn die Struktur der Parameter einer Funktion ist, die über DllImport aus einer unmanaged DLL importiert wurde. Inherhalb von C# selbst hat die Angabe keinerlei Einfluss auf die Programmausführung.