PInvoke von 2dim char array

28/05/2008 - 20:16 von je | Report spam
Hallo allerseits,

es ist schon erstaunlich, aber ich habe im Net nichts für diesen
Standardfall gefunden, der mir weitergeholfen hàtte.

Ich bekomme Daten über die serielle Schnittstelle, die zu einem c-
Strukt gemappt werden können. Bislang habe ich folgendes:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct TXHEAD
{
public fixed char messart[2];
public char ger_typ;
public char version;
public byte land;
public fixed char fuel[16];
...
public fixed char sensname[7][4]; // Compiler meckert!
...

Wie deklariere ich dieses 2dim char arry? Muss ich einen Custom
Marshaller schreiben? Wenn ja, wie geht das?

Eigentlich werde ich wohl zuerst ein Byte[] haben mit dem vollen Raw-
Header und diesen dann casten. Ja, manchmal vermisse ich wirklich
Zeiger und Casts in c#, das war so leicht in c...


Vielen Dank.

Johannes
 

Lesen sie die antworten

#1 Alain Boss
29/05/2008 - 14:38 | Warnen spam
Deine Struktur ist mit grosser Wahrscheinlichkeit falsch. Versuchs mal
damit:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TXHEAD
{
[MarshalAs(UnmanagedType.LPArray, SizeConst = 2)]
public Byte[] messart;

public Byte ger_typ;
public Byte version;
public Byte land;

[MarshalAs(UnmanagedType.LPArray, SizeConst = 16)]
public Byte[] fuel;

[MarshalAs(UnmanagedType.LPArray, SizeConst = 28)]
public Byte[,] sensname;
}

Keine Ahnung obs damit klappt, ich konnte es ja nicht testen ;-)

Hier noch ein paar Bemerkungen:
- Du brauchst kein unsafe dafür.Ich habe schon einige pinvokes gemacht,
klappte alles ohne unsafe
- fixed auch nicht
- Deine Bezeichner sind teils in deutsch, teil in englisch. Entscheide
dich für eine Sprache
- Wende die Schreibregeln vom MS an (kein underscore '_'; Pascal resp.
Camel casing)
- In C ist ein Character char 8bit gross in C# ist er 16bit
- schau mal bei
http://msdn.microsoft.com/en-us/library/z6cfh6e6(VS.71).aspx vorbei
- schau mal bei http://www.pinvoke.net/ vorbei
- Verwende bitte Vor- und Nachname für Postings, das gehört zur Netiquette

gruss
Alain

ps: Ich verwende ausschliesslich FCL Typen in meinem Code. Wem's nicht
gefàllt, soll es bitte ignorieren.

Ähnliche fragen