如何通过C++;短*到C+中的托管C#程序集+/CLI

如何通过C++;短*到C+中的托管C#程序集+/CLI,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)时遇到的编译器错误是“无法

将参数从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);

非常感谢您的回复。我可以发誓我已经试过了,但显然我不能,因为我一解引用指针,它就编译了。干杯