Как это:
[DllImport("...")]
private static extern void Foo(int count, string[] pairs);
C #, соответствующий вашему примеру:
var pairs = new[] { "Hello", "Bob", "Goodbye", "Diane" };
Foo(pairs.Length >> 1, pairs);
Я протестировал это с фиктивной библиотекой C, и она работает как рекламируется.
libtest.c:
#include <stdio.h>
void Foo( int count, const char* pairs[][ 2 ] ) {
int i;
for (i = 0; i < count; i++) {
printf("%d: %s\n", i, pairs[i][0]);
printf("%d: %s\n", i, pairs[i][1]);
}
}
test.cs:
using System;
using System.Runtime.InteropServices;
public static class Foobar {
public static void Main() {
var strings = new[] {
"The", "quick",
"brown", "fox",
"jumped", "over",
"the", "lazy",
"dog", "LOL"
};
Foo(strings.Length >> 1, strings);
}
[DllImport("test")]
private static extern void Foo(int count, string[] pairs);
}
Выход:
0: The
0: quick
1: brown
1: fox
2: jumped
2: over
3: the
3: lazy
4: dog
4: LOL