NancyG Geschrieben 9. Januar 2013 Geschrieben 9. Januar 2013 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
NancyG Geschrieben 21. Januar 2013 Autor Geschrieben 21. Januar 2013 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"
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden