Передать параметры из C# в библиотеку C++

149
11 марта 2018, 20:01

На C# написана программа, есть там тип данных List<Tuple<double,double,DateTime>>, необходимо это передать во встраиваемую библиотеку С++. Kак в С++ именно записать вводные данные? Kаким типом? Скорее всего буду хранить их в массиве структур. Но как провести передачу именно? Библиотеку на С++ буду писать сам. Подскажите пожалуйста.

Answer 1

Как уже подсказали в комментах, удобне будет использовать структуру. DateTime лучше не передавать в C++ напрямую, а превратить его в что-то иное. Вот пример.

C#:

[StructLayout(LayoutKind.Sequential)]
public struct Data
{
    public double d1;
    public double d2;
    public int year;
    public int month;
    public int day;
}
[DllImport("CppDll")]
public static extern bool MyCppFunc(int count, Data[] data);
static void Main(string[] args)
{
    List<Data> list = new List<Data>
    {
        new Data
        {
            d1 = 123,
            d2 = 0.5,
            year = 2018,
            month = 3,
            day = 12
        },
        new Data
        {
            d1 = 456,
            d2 = 0.75,
            year = 2018,
            month = 3,
            day = 15
        },
    };
    MyCppFunc(list.Count, list.ToArray());
}

C++:

typedef struct _MYDATA
{
    double d1;
    double d2;
    int year;
    int month;
    int day;
} MYDATA;
BOOL WINAPI MyCppFunc(int count, MYDATA * data)
{
    for (int i = 0; i < count; i++)
    {
        printf("d1=%f\n", data[i].d1);
        printf("d2=%f\n", data[i].d2);
        printf("year=%d\n", data[i].year);
        printf("month=%d\n", data[i].month);
        printf("day=%d\n\n", data[i].day);
    }
    return TRUE;
}
READ ALSO
взять данные из другого формы через user control (winforms)

взять данные из другого формы через user control (winforms)

Добрый деньЕсть одна форма и user control

142
LINQ сумма в итогах

LINQ сумма в итогах

Здравствуйте!

150
Заменить окончания слов (c#)

Заменить окончания слов (c#)

Пользователь вводит текстЕсли слово заканчивается на гласную, то заменить окончание на "program"(c #)

160