如何在 C# 中编组数据类型 unsigned char**?

Posted

技术标签:

【中文标题】如何在 C# 中编组数据类型 unsigned char**?【英文标题】:How to marshall data type unsigned char** in C#? 【发布时间】:2010-06-18 08:02:30 【问题描述】:

我正在尝试编组 unsigned char**(在 C++ 接口中)以便从 C# 调用该方法。

如何做到这一点?是否有 C++ 数据类型和 C# 数据类型的列表?

谢谢!

【问题讨论】:

【参考方案1】:

这个unsigned char** 的语义是什么?如果是字节数组,则使用ref byte[]。 如果它是一个以零结尾的字符串,请使用ref string

你可以在页面http://www.pinvoke.net找到一些流行的方法签名映射到c#,这可能会给你一些想法。

【讨论】:

在 C++ 接口中有这样一句话:“这个 [unsigned char**] 是一个指向字符数组的指针数组。每个字符都是标准 XSB 字符之一。”。此变量应用于存储推箱子游戏中对象的位置。谢谢! 在这种情况下 string[] 应该适合。【参考方案2】:

我认为您应该使用具有C++C# 接口的序列化库。

来自 Google 的 Protocol Buffers 或来自 Facebook 的 Thrift 都支持这两种语言。

它肯定会让您的事情变得更轻松、更安全。

如果您决定更改传输的数据类型(即使用整数、结构等而不是原始字符串),则可以使用序列化库。

【讨论】:

感谢您的链接!但这是我需要的最后一个数据类型,所以我很乐意整理它并继续其他工作:) 如果您有空闲时间,我真的建议您查看一下。这似乎是您项目的完美用例,因为您正在交换不同的消息类型。使用协议缓冲区,更改消息结构或接口非常容易。这是一个帮助您开始使用 C# 的教程:snipplr.com/view/24475/…。您甚至可以在 Visual Studio IDE 中使用它:code.google.com/p/protobuf-net。【参考方案3】:

这可以编组为ref string。请务必使用具有[MarshalAs] 属性的正确字符集。

【讨论】:

以上是关于如何在 C# 中编组数据类型 unsigned char**?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中编组 wstring *?

C# 中的 C++ int & long 编组

将双精度的 C-Struct 编组为 C# - 正值错误

C 到 C# 数组编组中的矛盾行为

将 C++ 数据类型编组为 C#

如何编组包含未知大小的 int 数组的结构?