Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Marshal array of char array

Empfohlene Antworten

Veröffentlicht

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...
  • 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.