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