【问题标题】:How can I pass and save C/C++ pointers to C#, and return them back, using Mono Project如何使用 Mono Project 将 C/C++ 指针传递和保存到 C#,并将它们返回
【发布时间】:2019-02-02 01:51:06
【问题描述】:

我在弄清楚如何有效地将 C 指针传递和存储到 C#,然后在我需要 Mono 时将它们返回时遇到了一个严重的问题。我正在 C++ 之上使用 C# 构建脚本层。例如(伪代码):

C++:

GameObject* owner = new GameObject();
void* args[1] = {owner};
return_object = mono_runtime_invoke("InitReference", mono_object, args, &exception);

C#:(C# GameObject 类实例)

public IntPtr InitReference(IntPtr game_object_ptr)
{
    return game_object_ptr;
}

我想要实现的是 C++ 对象实例和实际 C# 表示之间的关系。这方面的信息很少,我有点迷茫。

【问题讨论】:

标签: c# c++ pointers mono


【解决方案1】:

我的建议:
新建一个具有 StructLayout 属性的 .Net 结构,例如:

[StructLayout( LayoutKind.Explicit )]
public struct GameObject
{
  [FieldOffset(0)]
  public int Id;
  ......
}

然后.net 指针可以指向结构实例。

【讨论】:

    【解决方案2】:

    经过一番尝试,我解决了我的问题: 首先,我将指针地址存储到 char 缓冲区中,然后将其作为整数数组 int[] 传递给 mono。这允许我的指针地址在 C# 环境中保持活动状态,并且我可以随时检索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多