문제

NULL BSTR (NULL WCHAR* 포인터)을 빈 문자열로 취급하고 그에 따라 BSTR을 조작하는 모든 코드를 설계하는 것이 적어도 일반적인 관행입니다. 답변 이 질문 똑같이 말하십시오.

이 연습은 어디에 기록되어 있습니까? 이 협약을 설명하는 공식 문서가 있습니까?

도움이 되었습니까?

해결책

글쎄, 그 질문에 대한 받아 들여진 답변에 주어진 링크는 Eric Lippert의 기사입니다. 에릭의 BSTR 의미에 대한 완전한 가이드. 가장 확실하지만 ~ 아니다 공식 문서로, Lippert는 COM (특히 스크립팅 경기장)에 대한 잘 알려진 권한입니다.

하지만, 공식 문서 이것은 다음과 같이 말할 수 있습니다.

데이터 요소가없는 BSTR은 빈 BSTR 또는 NULL BSTR입니다. 빈 BSTR은 현재이지만 제로 길이의 데이터 값을 나타냅니다. NULL BSTR는 존재하지 않는 데이터 값을 나타냅니다.

그래서 공식적으로 그들은 둘 다입니다 BSTR데이터 요소는 없지만 의미가 약간 다른 S가 있습니다 (응용 프로그램에서 2 건의 경우를 다르게 처리해야한다는 말은 없습니다). 이 경우, 나는 그것들을 동일하게 취급한다는 Lippert의 조언을 확실히 따릅니다. 저에게있어 실제 구현이 어떻게 작동하는지에 대한 그의 실제 경험은 공식 BSTR 문서의 한 문장보다 더 많은 무게를 전달합니다.

다른 팁

마이클 버 (Michael Burr)는 내가 받아 들여진 대답이되어야한다고 생각합니다. 불행히도 페이지가 아닙니다 BSTR MSDN에서는이 관행을 문서화하지 않습니다.

또한 MSDN 문서 에서이 페이지 에서이 동작을 추론 할 수 있습니다.

  • SysFreeString 페이지가 IF를보고합니다 bstr ~이다 null 함수는 단순히 반환됩니다.
  • SysStringLen 페이지가 전달된다고보고합니다 nullbstr 매개 변수는 문자열 길이에 대해 0을 반환합니다.
  • SysStringByteLen 페이지는 동일한 동작을보고합니다. null 길이가 0입니다.

그러나 문서는 완료되지 않았습니다.

  • SysReAllocString 어떤 일이 일어날 지 언급하지 않습니다 *pbstr ~이다 null.
  • SysReAllocStringLen 어떤 일이 일어날 지 언급하지 않습니다 *pbstr ~이다 null.

Null BSTR 처리는 빈 문자열 이음새로 일반적인 관행이되지만 Microsoft에서 발견 된 기술 문서는 실제로 거기에 있습니다. ~이다 이 둘의 차이.

MS-DTYP] 및 [MS-OAUT]를 참조하는 문서의 경우 와이어 표현 컨텍스트에서 BSTR을 지정하는 것은 전송 된 BSTR 유형에 대한 참조로 간주되어야하며 메모리 표현 컨텍스트에서 BSTR을 지정하는 것은 참조로 간주되어야합니다. 제시된 BSTR 유형 ([MS-DTYP] 섹션 2.2.5). 제시된 BSTR에 사용 된 용어를 반영하여, 널 BSTR 또는 널 전송 된 BSTR은 널 표시된 BSTR의 와이어 표현으로 정의됩니다. 빈 BSTR 또는 빈 전송 BSTR은 제시된 BSTR의 제로 길이의 와이어 표현으로 정의됩니다. 와이어 표현에서 이러한 차이를 보존하면 클라이언트와 서버는 NULL 제시된 BSTRS와 제로 길이가 제시된 BSTR을 구별 할 수 있으므로,이 두 값과 다른 응용 프로그램 별 시맨틱을 연결할 수 있습니다.

https://msdn.microsoft.com/en-us/library/cc237580.aspx

따라서 모두 동일하게 처리하든 아니든 구현에 달려 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top