2009-10-19 3 views
1

커다란 char *를 cpp에서 .Net (가급적 COM을 사용)으로 전달하고 싶습니다. 메모리 측면에서 가장 좋은 방법은 무엇입니까?char *를 .Net에 전달하는 가장 좋은 방법

내가 CComBSTR을 사용하는 경우 CPP에서 BSTR을 만들 때와 특히 COM 호출 내에서 .Net으로 이동할 때 많은 메모리가 필요합니다.

+0

세미 중복 질문 http://stackoverflow.com/questions/1450731/equivalent-char-in-c/1450921#1450921 – ParmesanCodice

답변

0

StringBuilder를 입력 매개 변수로 전달할 수 있으며 C++ 코드는이를 쓸 수 있습니다. FAQ on PInvoke에서

:

이 문제를 해결하려면 전체 .NET Framework의, 당신은 대신 System.Text.StringBuilder 객체를 전달할 수 있습니다 (는 Win32 API를 많이하기 때문에 문자열 버퍼가 기대) 포인터는 마샬 러에 의해 처리 될 수있는 관리되지 않는 함수로 전달됩니다. 유일한주의 사항은 StringBuilder에 반환 값을위한 충분한 공간이 할당되어야합니다. 그렇지 않으면 텍스트가 오버플로되어 P/Invoke에 의해 예외가 throw됩니다.

2

내 선택은 String으로 마샬링하는 것이지만, 수행해야 할 추가 concat와 같은 일부 사후 처리가있는 경우 StringBuilders도 사용됩니다.

간단한 예를 보려면 here을 참조하십시오.

+0

사실이 아니다 "사본에 상관없이 당신이 무엇을 선택 생성되지해야합니다"; C++ 코드는 기존 버퍼로 StringBuilder를 사용하여 쓸 수 있습니다. –

관련 문제