Zum Inhalt springen

Marshal array of char array


Empfohlene Beiträge

Geschrieben

Hi,

ich habe ein Problem, mit einer c-Funktion. Diese nimmt eine Struktur entgegen, welche ein char[][] enthält.

Wie muss die Klasse/Struktur unter c#/vb aussehen, damit ich direkt über die Indizes auf den String/Char[] zugreifen kann.

DEC-Header

typedef struct {
int msgs;
char msg[5][200];
} MSG; [/PHP]

Funktion C

[PHP] int getMSG( MSG* );

Was geht, aber ich nicht möchte, ist die 5 * Char[200] einzeln in eine Klasse zu packen.


<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>

Public Class MSG

    <MarshalAs(UnmanagedType.I4)>

    Public msgs As Int32


    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg_1 As [String]

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg_2 As [String]

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg_3 As [String]

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg_4 As [String]

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg_5 As [String]

End Class

Denn haben möchte ich so was in der Art, nur weiß ich nicht, wie ich das bewerkstelligen soll:
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>

Public Class MSG

    <MarshalAs(UnmanagedType.I4)>

    Public msgs As Int32


    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg(4) As [String]

End Class
damit man per
 ...

    Dim test as MSG

...

    test.msg(0) = "test1"

    test.msg(1) = "test2"

    test.msg(2) = "test3"

    test.msg(3) = "test4"

    test.msg(4) = "test5"

darauf zugreifen kann.

Grüße Nancy

  • 2 Wochen später...
Geschrieben

Lösung:

Ich kann mir jetzt den Unterschied zwischen Class und Structure - was da passiert nicht erklären.

Aber so funktioniert es.


<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>

Public Structure MSG

    <MarshalAs(UnmanagedType.I4)>

    Public msgs As Int32


    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)>

    Public msg() As MSGS

End Structure


<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>

Public Structure MSGS

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=200)>

    Public msg As [String]

End Structure



Dim msgTest as new MSG()

msgTest.msgs = new MSGS(4) {}



msgTest.msgs(0).msg = "platz für 200 Chars"

msgTest.msgs(1).msg = "platz für 200 Chars"

msgTest.msgs(2).msg = "platz für 200 Chars"

msgTest.msgs(3).msg = "platz für 200 Chars"

msgTest.msgs(4).msg = "platz für 200 Chars"

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...