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

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

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

谢谢!

【问题讨论】:

    标签: c# c++ marshalling


    【解决方案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] 属性的正确字符集。

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 2011-04-29
      • 2011-01-19
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多