0

我想知道如何将 String 或 StringBuilder 传递给通过参数输出字符串的 C 函数。我找到了一个很好的答案

从 C# 调用非托管函数:我应该传递 StringBuilder 还是使用不安全的代码?

但我有一个疑问。任何人都可以向我解释为什么垃圾收集器在导入函数执行期间不重新定位(托管)StringBuilder 实例?

4

1 回答 1

1

有关使用 COM 和 P/Invoke 时如何编组字符串和 StringBuilder 的详细信息,请参阅字符串的默认编组。它没有明确说明为什么使用模式是安全的,但确实表明支持使用字符串和 StringBuilder 进行 P/Invoke 和预期行为。我怀疑编组系统在外部调用期间负责固定缓冲区,防止 GC 重新定位它。

于 2009-12-07T09:57:35.140 回答