2010-06-28 4 views
1

이 코드는 오류가 발생하지 않을를 숯불하기 :_bstr_t는 포인터와 호출으로 atof (...)

텍스트가 double 값입니다
_bstr_t text=n.GetText(); 

atof((char*)text) 

.

_bstr_t은 변환시 const char*을 생성합니다. 그래서 atof()이 작동하는지 확신 할 수 없습니까?

+0

GetText에서 BSTR을 반환합니까? 그렇지 않다면, 이것은 매우 순환적인 방법입니다. 왜'LPCWSTR text = n.GetText();'와'_wtof (text)'를 사용하여 변환을 저장하지 않습니까? 그렇다면 BSTR을 소유하고 있다면 제대로 파괴 할 수 있습니까? 나는 기억할 수 없다. 그러나 나는 당신이 그것을하기 위해 괄호 생성자 또는 첨부물을 필요로한다고 짐작했을 것이다. – Rup

+0

GetText는 _bstr_t를 반환합니다. –

답변

2

우선 _bstr_toperator char*() const이므로 캐스트가 필요하지 않습니다. 그런 다음 ConvertBSTRToString()을 호출하여 delete[] (나중에 링크 된 기사의 예제 참조)이 필요한 힙 할당 문자 배열을 반환합니다. 그렇게하지 않으면 메모리 누수가 발생합니다. 마지막으로, _bstr_t은 빈 문자열에 해당하는 null 포인터를 캡슐화 할 수 있으며 프로그램은 이러한 상황을 처리해야한다는 것을 알고 있어야합니다.

+1

하지만 왜 변환을해야합니까? 왜 원시 BSTR에'_wtof'를 사용하지 않는가? – Rup

+0

난 상관 없어. 하지만 null BSTR을 검사하는 것이 필요합니다. – sharptooth

+1

_bstr_t 클래스는 내부 데이터 구조로 메모리를 관리합니다. 너는 너 자신 기억을 해방하면 안된다. – Luke

1

_wtof(text) (http://msdn.microsoft.com/en-us/library/hc25t012.aspx 참조)을 사용하면 필요한 변환을하는 것이 절대적으로 안전합니다.

@sharptooth : 일반적으로 BSTR 데이터는 항상 0으로 끝나는 문자열이 아니어야합니다. 그러나 _bstr_t 클래스의 설명에 대응한다 (http://msdn.microsoft.com/en-us/library/zthfhkd6.aspx 참조) 제로 - 말단 생략 될 수 SysAllocString 다른 SysAlloc-기능 할당

A _bstr_t object encapsulates the BSTR data type. The class manages resource allocation and deallocation through function calls to SysAllocString and SysFreeString and other BSTR APIs when appropriate.

데이터 만. SysAllocString 함수는 항상 추가 2 바이트를 할당하고 L '\ 0'을 채 웁니다. 이 주제에 대한 자세한 내용은 http://blogs.msdn.com/b/ericlippert/archive/2003/09/12/52976.aspx을 참조하십시오.

관련 문제