如何在C ++ / CLI中将C ++ short *传递给托管C#程序集

问题描述

|| 我在将参数从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 *参数一起使用。 提前致谢。     

解决方法

CSharpClass::SetValue
的逻辑C ++ / CLI签名为
void SetValue(short% id);
如果您了解C ++(而不是C ++ / CLI),那么这里的答案与拥有C ++签名的答案完全相同
void SetValue(short& id);
即,只需取消引用指针:
void SomeFunction(short *id)
{
    CSharpClass::StaticClassInstance->SetValue(*id);
}
    ,如果您想长期使用,请声明一个跟踪参考,将该跟踪参考分配给您的id参数,然后将该跟踪参考传递给您的函数...
short %s = *id;

SetValue (s);
如果您不想太忙,只需取消引用指针即可。虽然编译器无法将short *转换为short%,但可以将short转换为short%...
SetValue (*id);