【问题标题】:How to pass C++/CX structs to pure C++ methods?如何将 C++/CX 结构传递给纯 C++ 方法?
【发布时间】:2013-11-05 21:02:45
【问题描述】:

假设我有一个遗留的纯 C++ 库,其中包含一组以 C++ 结构(本机)作为参数的函数。这个库将被包装到一个 WinRT 组件中,该组件将从 C#(平台 - Windows Phone)中使用。显然,最简单的解决方案是将所有结构重复为 C++/CX 值结构。 但是如何将这些结构传递给纯 C++ 函数/方法?是否可以 ? 如果不是,在这种情况下包装逻辑的解决方案是什么?

【问题讨论】:

    标签: c# c++ windows-phone-8 windows-runtime


    【解决方案1】:

    一般来说,来自 C++/CX 的 value struct 需要在您的 C++/CX 层中复制某种形式,然后才能传递到本机代码。您需要将 C++/CX 表单中的数据编组到您正在使用的本机表单中。

    话虽如此,文档确实建议您可以直接使用 memcpyvalue struct 复制到标准(本机)C++ 结构,这比单独映射值更干净,前提是您不这样做使用String^IBox<T>^:

    包含 Platform::String^ 或 IBox^ 类型作为成员的值类或值结构不是 memcpy-able。

    【讨论】:

    • 很高兴可以使用内存复制。但是如何保证这两种类型的结构具有相同的大小和布局呢?还是默认的?
    • @mr_esp 如果你想 memcpy,你必须以相同的方式设计它们,使用兼容的类型。请查看[StructLayoutAttribute] 和类似内容以了解托管方面的详细信息。
    【解决方案2】:

    是的,这是可能的。阅读有关 P/Invoke 和结构的信息。您必须在 C# 中复制结构和函数声明,但它通常工作得很好。查看StructLayoutAttributeDllImportAttributeLayoutKind 的文档。

    【讨论】:

    • 这可能适用于 WinRT 上的 PC 版本,但不适用于 WindowsPhoneRT。
    • 哦,对不起。我忽略了这是用于电话的。我在这方面没有经验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多