#c# #c -cli
#c# #c -cli
Вопрос:
У меня возникли проблемы с передачей аргумента из кода 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 *, который я пытаюсь передать.
Заранее спасибо.
Ответ №1:
Логическая сигнатура C / CLI CSharpClass::SetValue
является
void SetValue(short% id);
Если вы знаете C (в отличие от C / CLI), ответ здесь точно такой же, как если бы у вас была подпись C
void SetValue(shortamp; id);
Т.е. просто разыменовать указатель:
void SomeFunction(short *id)
{
CSharpClass::StaticClassInstance->SetValue(*id);
}
Комментарии:
1. Большое спасибо за ответ. Я мог бы поклясться, что уже пробовал это, но, по-видимому, у меня не должно быть, потому что, как только я разыменовал указатель, он скомпилировался. Приветствия.
Ответ №2:
Если вы хотите быть многословным, объявите ссылку отслеживания, назначьте ссылку отслеживания вашему параметру id, а затем передайте ссылку отслеживания вашей функции…
short %s = *id;
SetValue (s);
Если вы не хотите быть многословным, просто разыменуйте указатель. Хотя компилятор не может преобразовать short * в short %, он может преобразовать short в short %…
SetValue (*id);