P / Вызов родной функции, которая принимает указатели на пары строк - PullRequest
1 голос
/ 17 декабря 2010

У меня есть приложение Visual Studio 2008 C # .NET 2.0CF, где мне нужно P / вызвать нативную функцию со следующей подписью:

/// @brief count - number of pairs
/// @brief pairs - pairs of pointers to strings
void Foo( int count, const char* pairs[][ 2 ] );

В C ++ это можно использовать:

const char* pairs[][2] = { { "Hello", "Bob" }, { "Goodbye", "Diane" } };
Foo( 2, pairs );

Как написать [DllImport()] подпись такой функции?

Спасибо, PaulH

1 Ответ

2 голосов
/ 17 декабря 2010

Как это:

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