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 Zitieren
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" Zitieren
Empfohlene Beiträge
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.