c# - 如何在 C++/CLI 中将 C++ short* 传递给托管 C# 程序集

标签 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) 时遇到的编译器错误是“无法将参数 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);
}

关于c# - 如何在 C++/CLI 中将 C++ short* 传递给托管 C# 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118263/

相关文章:

.net - 为什么 Threading::Monitor::TryEnter 不止一次成功?

c# - 在加载应用程序目录之外的目录中加载依赖于其他程序集的程序集?

c# - 使用甲骨文数据库。进入以下语句 ."ORA-00936: missing expression",如何解决这个问题?

c# - 将数据从一个控件绑定(bind)到另一个控件

c# - NLog 自定义 LayoutRenderer 用于范围缩进

c# - 事件参数——它们应该反射(reflect)事件发生时的状态快照还是实时数据?

c# - (.net) CriticalFinalizerObject - 它的真正作用是什么?

指针成员的 c++/CLI 包装器 - c++ 单例实例

.net - 将标准 C++ 嵌入到 .NET 应用程序中

c# - 在 C# 字节数组和 C++ 字节数组之间编码