如何使用Mono Project将C/C++指针传递和保存到C#,并将其返回

How can I pass and save C/C++ pointers to C#, and return them back, using Mono Project

本文关键字:保存 返回 Project Mono 何使用 指针 C++      更新时间:2023-10-16

我遇到了一个严重的问题,弄清楚如何将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#游戏对象类实例)

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

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

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

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

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

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