2009-12-07 3 views
0

String 또는 StringBuilder를 매개 변수별로 문자열을 출력하는 C 함수에 전달하는 방법에 대해 궁금합니다. 나는안전하지 않은 코드와 StringBuilder로 고정 된 문장

Calling unmanaged function from C#: should I pass StringBuilder or use unsafe code?

에 좋은 해답을 발견했습니다 그러나 나는 의심의 여지가있다. 누군가가 가비지 수집기가 가져온 함수 실행 중에 (관리되는) StringBuilder 인스턴스를 재배치하지 않는 이유를 설명 할 수 있습니까?

답변

1

COM 및 P/Invoke를 사용할 때 string 및 StringBuilder가 마샬링되는 방법에 대한 자세한 내용은 Default Marshaling for Strings을 참조하십시오. 명시 적으로 을 말하지 않고 사용 패턴이 안전하지만 P/Invoke에 string 및 StringBuilder를 사용하면 지원되고 의도 된 동작을 나타냅니다. 나는 마샬링 시스템이 외부 호출의 지속 시간 동안 버퍼를 고정하여 GC가 그것을 재배치하는 것을 방지한다고 생각한다.