Как передать C ++ short * в управляемую сборку C # в C ++ / CLI - PullRequest
3 голосов
/ 25 мая 2011

У меня проблемы с передачей аргумента из кода C ++ / CLI в функцию .NET C #.

В C ++ у меня есть нечто похожее на следующее:

void SomeFunction(short *id)
{
   CSharpClass::StaticClassInstance->SetValue(id);
}

На стороне C # функция объявляется с аргументом ref следующим образом:

public void SetValue(ref short id)
{
  id = this.internalIdField;
}

Ошибка компилятора при вызове SetValue (id): «невозможно преобразовать параметр 1 из« short * »в« short% »».

Я обнаружил, что ссылка отслеживания (%) эквивалентна C # ref, но я не знаю, как использовать ее с параметром short *, который я пытаюсь передать.

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

Ответы [ 2 ]

3 голосов
/ 25 мая 2011

Логическая подпись C ++ / CLI для CSharpClass::SetValue:

void SetValue(short% id);

Если вы знаете C ++ (в отличие от C ++ / CLI), ответ здесь такой же, как если бы вы имелиподпись C ++

void SetValue(short& id);

Т.е., просто разыменуй указатель:

void SomeFunction(short *id)
{
    CSharpClass::StaticClassInstance->SetValue(*id);
}
1 голос
/ 25 мая 2011

Если вы хотите, чтобы у вас были большие затраты, объявите ссылку отслеживания , назначьте ссылку отслеживания для вашего параметра id, а затем передайте ссылку отслеживания в вашу функцию ...

short %s = *id;

SetValue (s);

Если вы не хотите долго ждать, просто разыменуйте указатель.Хотя компилятор не может преобразовать короткое * в короткое%, он может преобразовать короткое в короткое% ...

SetValue (*id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...