如何在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);