如何通过 C++短* 到 C++/CLI 中的托管 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 *' 转换为 '短的 %'”。
我发现跟踪引用 (%) 相当于 C# 引用,但我不知道如何将它与我试图传递的短*参数一起使用。
提前致谢。
I'm having trouble passing an argument from C++/CLI code into a .NET C# function.
In C++ I have something resembling the following:
void SomeFunction(short *id)
{
CSharpClass::StaticClassInstance->SetValue(id);
}
On the C# side, the function is declared with a ref argument as:
public void SetValue(ref short id)
{
id = this.internalIdField;
}
The compiler error I'm getting when calling SetValue(id) is "cannot convert parameter 1 from 'short *' to 'short %'".
I found out that a tracking reference (%) is equivalent to C# ref but I don't know how to use it with the short* parameter I'm trying to pass.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
CSharpClass::SetValue
的逻辑 C++/CLI 签名是如果您了解 C++(而不是 C++/CLI),那么此处的答案与您拥有 C++ 签名时的答案完全相同,
即,只需取消引用指针:
The logical C++/CLI signature of
CSharpClass::SetValue
isIf you know C++ (as opposed to C++/CLI), the answer here is the exact same as it would be if you had the C++ signature
I.e., simply dereference the pointer:
如果您想长篇大论,请声明一个跟踪引用,指定跟踪对 id 参数的引用,然后将跟踪引用传递给您的函数...
如果您不想啰嗦,只需取消引用指针即可。虽然编译器无法将短*转换为短%,但它可以将短转换为短%...
If you want to be long winded, declare a tracking reference, assign the tracking reference to your id parameter and then pass the tracking reference to your function...
If you'd rather not be long winded, just dereference the pointer. While the compiler cannot convert a short * into a short % it can convert a short into a short %...