【发布时间】:2015-03-20 16:14:15
【问题描述】:
我有一个 C++ 库方法,我想从 Unity C# 脚本中调用它。
我知道有三个关键步骤。首先,将 C++ 方法声明为extern "C"。其次,在相应的C# extern 方法声明之前使用[DllImport('foobar')]。第三,以lib前缀命名库文件(例如libfoobar.so)并将其放置在Unity插件文件夹中。
到目前为止一切顺利——如果我只是将简单的参数类型(如 int)从 C# 传递到 C++。但是,要传递 byte[] 参数,我需要考虑 C# 和 C++ 处理内存和指针的不同方式。我还没有找到一个明确的例子来说明如何做到这一点。
我的问题:如何将 byte[] 从 Unity C# 脚本传递到外部 C++ 库方法?
【问题讨论】:
-
这是 P/Invoke 方法吗?您还可以使用 C++ CLI。我听说 C++ CLI 给了你更多的控制权。但是,我从来没有做过。带上一粒盐。
-
不要忘记来自 DllImport 的
CallingConvention = CallingConvention.Cdecl,因为您使用的是extern "C" -
@Golazo - 不使用 P/Invoke,只是将 C++ extern 声明为
extern "C"并通过DllImport属性从 C# 引用它。不需要 P/Invoke,至少不需要传入简单的参数类型。 -
这是托管 C++ 吗?因为据我所知,如果没有 P/Invoke、C++ CLI 或 COM,您无法在 C# 中调用本机 C++ 代码
标签: c# c++ unity3d mono bytearray