Обтекание ссылочного параметра C ++ в C # при использовании DllImport - PullRequest
4 голосов
/ 15 апреля 2011

Я пытаюсь обернуть функцию C ++, у которой есть ссылочный параметр, с кодом C #.
Мой класс оболочки C # имеет

[DllImport(TestCppDLL.dll)]
public static extern void foo(out int a, out int b, out double c);

public void main()
{
    int a;
    int b;
    double c;

    this.foo(out a, out b, out c);
    Console.WriteLine(a + b + c);
}

И мой код C ++

extern void foo(int &a, int &b, double &c)
{
     a = 1;
     b = 2;
     c = 3;
}

Таким образом, я ожидаю, что результат будет «123», но я получу «000».
Как мне обернуть эталонный параметр C ++?

Заранее спасибо,

1 Ответ

4 голосов
/ 15 апреля 2011

Ваш код C ++ возвращает значение типа double, но ваш код C # объявляет, что функция имеет возвращаемое значение void.

Возможно, у вас также есть несоответствие соглашения о вызовах.C ++ по умолчанию - cdecl, C # по умолчанию - stdcall.

В противном случае все в порядке.

...