我想知道如何将String或StringBuilder传递给通过参数输出字符串的C函数。
我找到了一个很好的答案Calling unmanaged function from C#: should I pass StringBuilder or use unsafe code?
但我怀疑。任何人都可以向我解释为什么垃圾收集器在导入的函数执行期间不重定位(托管)StringBuilder实例?
答案 0 :(得分:1)
有关在使用COM和P / Invoke时如何封送string和StringBuilder的详细信息,请参阅Default Marshaling for Strings。它没有明确说为什么使用模式是安全的,但确实表明使用字符串和StringBuilder进行P / Invoke是支持和预期的行为。我怀疑编组系统负责在外部呼叫期间固定缓冲区,阻止GC重新定位。