Announcement

Collapse
No announcement yet.

DLL Function mit 2-dimentionalen Feld als Parameter

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DLL Function mit 2-dimentionalen Feld als Parameter

    Ich habe eine C geschriebene DLL vorliegen. Aus dieser
    DLL möchte ich eine Funktion verwenden, welche ein
    2-dimentionales Feld als Parameter besitzt.

    In C++ geht dies wie folgt:
    Funktion im Header:
    extern "C" int getDirFromFlash(char *entry[128]);

    ansprechen :

    char entrylist[128][100];
    char *entry[128];

    for(int i=0;i<128;i++)
    {
    entry[i]=entrylist[i];
    entry[i][0]=0;
    }
    if(getDirFromFlash(entry)==0) //funktioniert
    {...}

    Jetzt stellt sich für mich die Frage, wie macht man es in C#?

    Ich habe es mit einem normalen char[]-Feld hinbekommen, aber
    ich bekomme es nicht mit einem 2 dimentionalen hin.

    Beispiel mit normal char[] Feld:

    public Aufruf
    {
    .......
    public sring GetSerial()
    {
    byte[] buf = new byte[100];
    error=ExDLL._getSerialNumber(buf);
    return ByteArrayToString(ref buf,buf.Length);
    }
    }

    public class ExDLL
    {
    [DllImport("blah.dll", CharSet=CharSet.Auto)]
    public static extern int _getSerialNumber(byte[] text);
    }

    Wie lautet nun ein Beispiel für ein 2-dimentionales Feld??

  • #2
    Mehrdimensionale Felder werden durch das Marshalling nicht direkt unterstützt. Da aber ein mehrdimensionales Feld nichts weiter ist, als mehrere eindimensionale Felder hintereinander, zeichne das Feld einfach mit

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 100*128)]

    aus.

    Die entsprechende Feldarithmetik musst du dir dann natürlich per Hand bauen, bzw. das Feld in ein zweidimensionales Feld umkopieren

    Comment

    Working...
    X