Veröffentlicht 9. Januar 201312 j 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
21. Januar 201312 j Autor 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"
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.