【问题标题】:Best way to pass char* to .Net将 char* 传递给 .Net 的最佳方式
【发布时间】:2010-12-08 02:05:48
【问题描述】:

我想将一个大字符 * 从 cpp 传递到 .Net(最好使用 COM)。 最好的方法是什么(就内存而言)?

如果我使用 CComBSTR,在 CPP 中创建 BSTR 时,尤其是在 COM 调用中将其移动到 .Net 时,都会占用大量内存。

【问题讨论】:

标签: .net c++ memory com


【解决方案1】:

我的选择是编组为 String,尽管我已经看到 StringBuilders 也被使用,如果有一些后处理,例如要完成的进一步连接。

有关简单示例,请参阅here

【讨论】:

  • “无论你选择什么,都需要创建一个副本”不是真的; C++ 代码可以使用 StringBuilder 作为现有缓冲区进行写入。
【解决方案2】:

您可以将 StringBuilder 作为输入参数传递,C++ 代码可以写入该参数。

来自FAQ on PInvoke

要在完整的 .NET Framework 中解决这个问题(因为许多 Win32 API 需要字符串缓冲区),您可以改为传递 System.Text.StringBuilder 对象;封送拆收器将指针传递到可以操作的非托管函数中。唯一需要注意的是 StringBuilder 必须为返回值分配足够的空间,否则文本会溢出,导致 P/Invoke 抛出异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多