【问题标题】:System::String to char* and back in C++/CLI: Faster than Marshal?System::String 到 char* 并在 C++/CLI 中返回:比 Marshal 更快?
【发布时间】:2011-06-01 08:45:55
【问题描述】:

在 C++/CLI 项目 (Visual Studio 2010) 中,将 System::String 转换为 char* 以便将其发送到系统函数以及类似地将接收到的 char* 转换为 System 的最佳方法是什么::字符串?

有没有比使用 System::Runtime::InteropServices::Marshal 类更快的方法?

【问题讨论】:

    标签: string c++-cli char


    【解决方案1】:

    char* 还是 wchar_t*const 还是没有?如果您真正需要的是 const wchar_t*,您可以使用 vcclr.h 中的 PtrToStringChars 快速完成,这不会引起任何偷听(但是您仍然需要固定结果)。

    换一种方式,你可能无法明显击败Marshal,但System::String 确实有带指针的构造函数。

    【讨论】:

    • 只是一个字符*。如果我固定字符串,那不会对内存管理产生不利影响吗?
    • 是的,但您需要在系统功能期间固定它,否则 GC 可能会将其从您的下方移出。如果是char*,那么无论如何您都必须进行一些复制。
    • 仅供参考,可以取消固定吗?执行离开固定指针的上下文后,它是否会取消固定?
    • 正确,如果您使用 pin_ptr,它会被 RAIIed。当pin_ptr 超出范围时,它会被取消固定。
    • 没有。这将导致未定义的行为。您需要将 unicode 字符串转换为真正的 char*(除非此函数将数据作为字节包进行操作并且不将其视为实际字符串)。有什么功能(如果分享有用的话)?
    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多