2011-04-07 2 views
4

나는 C++ COM 프로그래밍에 다시 몰두해야하며, 지난 번에 습득 한 많은 교훈을 잊어 버렸습니다. ('never never again'이 실수로 사용되었을 수도 있습니다.)C++ COM : 일반적인 실수들

C++에서 COM 개발의 가장 일반적인 실수 및 반 패턴은 무엇입니까? 저는 Borland C++ Builder를 사용하고 있습니다 만, 모든 C++ 컴파일러에 적용되는 것들을 다루고 있습니다.

는 BSTR 매개 변수를 필요 기능에 리터럴 문자열을 통과하지 마십시오

답변

0

나는 내가 다시 걸려 넘어 처음으로 나 자신을 압연 공을 걷어 것입니다. the remarks section here을 참조하십시오. 대신

CComPtr<IFoo> foo; 

foo->bar("Bletch!"); // No valid BSTR prefix, so bad things will happen. 

, 사용 ...

foo->bar(CComBSTR("Bletch!")); 
+0

이렇게하면 호출 된 코드가 소유권을 갖지 않는 한 BSTR이 누출됩니다 (후자는 매우 드뭅니다). 'CComBSTR' 또는'_bstr_t'와 같은 래퍼 클래스를 사용해야합니다. – sharptooth

+0

@sharptooth. 고마워, 고쳐. 나는 그것이 일반적인 실수라고 생각한다 :-) ( – Roddy

2

내 실수는 설명서를 읽고되지 않았습니다. 나는 온라인에서 찾은 튜토리얼과 코드 샘플을 사용하려고했다. 내가 COM에 대한 기본 지식을 익혔다면 해결하기 쉬운 문제에 많은 시간을 낭비했다.

+1

+1. 확실히. 두포에서 진행되는 일을 마스터하지 않으면 익사 할 것이다. 이것은 슬픈 일이다. (COM은 정말 가난한 틀이다.), 어렵지만 객체 모델, 유형, 공통 인터페이스 (특히 IDispatch를 사용하는 경우)를 이해해야합니다. –