【发布时间】:2010-12-08 02:05:48
【问题描述】:
我想将一个大字符 * 从 cpp 传递到 .Net(最好使用 COM)。 最好的方法是什么(就内存而言)?
如果我使用 CComBSTR,在 CPP 中创建 BSTR 时,尤其是在 COM 调用中将其移动到 .Net 时,都会占用大量内存。
【问题讨论】:
我想将一个大字符 * 从 cpp 传递到 .Net(最好使用 COM)。 最好的方法是什么(就内存而言)?
如果我使用 CComBSTR,在 CPP 中创建 BSTR 时,尤其是在 COM 调用中将其移动到 .Net 时,都会占用大量内存。
【问题讨论】:
我的选择是编组为 String,尽管我已经看到 StringBuilders 也被使用,如果有一些后处理,例如要完成的进一步连接。
有关简单示例,请参阅here。
【讨论】:
您可以将 StringBuilder 作为输入参数传递,C++ 代码可以写入该参数。
要在完整的 .NET Framework 中解决这个问题(因为许多 Win32 API 需要字符串缓冲区),您可以改为传递 System.Text.StringBuilder 对象;封送拆收器将指针传递到可以操作的非托管函数中。唯一需要注意的是 StringBuilder 必须为返回值分配足够的空间,否则文本会溢出,导致 P/Invoke 抛出异常。
【讨论】: