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

发布于 2024-11-09 16:22:35 字数 448 浏览 0 评论 0原文

我在将参数从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘虞初梦 2024-11-16 16:22:35

CSharpClass::SetValue 的逻辑 C++/CLI 签名是

void SetValue(short% id);

如果您了解 C++(而不是 C++/CLI),那么此处的答案与您拥有 C++ 签名时的答案完全相同,

void SetValue(short& id);

即,只需取消引用指针:

void SomeFunction(short *id)
{
    CSharpClass::StaticClassInstance->SetValue(*id);
}

The logical C++/CLI signature of CSharpClass::SetValue is

void SetValue(short% id);

If 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

void SetValue(short& id);

I.e., simply dereference the pointer:

void SomeFunction(short *id)
{
    CSharpClass::StaticClassInstance->SetValue(*id);
}
最丧也最甜 2024-11-16 16:22:35

如果您想长篇大论,请声明一个跟踪引用,指定跟踪对 id 参数的引用,然后将跟踪引用传递给您的函数...

short %s = *id;

SetValue (s);

如果您不想啰嗦,只需取消引用指针即可。虽然编译器无法将短*转换为短%,但它可以将短转换为短%...

SetValue (*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...

short %s = *id;

SetValue (s);

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 %...

SetValue (*id);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文