문제

좋아, 그래서 나는 이것을 요약하는 Apropos 제목을 실제로 생각할 수 없었다.

iprintpipelinepropertybag 인터페이스에는 "속성 백에 속성을 추가하는"메소드 AddProperty가 있습니다.

http://msdn.microsoft.com/en-us/library/aa506384.aspx

addProperty ([in, String] const wchar_t *pszname, [in] const variant *pvar);

다음 코드를 사용하여 속성 백에 문자열을 추가합니다.

CComVariant varProperty = CComBSTR(someString);
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);

그러나 생성 된 Ccombstr 및 Ccomvariant는 잠시 후에 범위를 벗어나는 것이 분명합니다. Propertybag이 문자열을 처리하고 자체 사본을 만드는지 확실하지 않습니다. 모든 종류의 물건을 변형 안에 보관할 수 있으므로 그렇지 않습니다.

문자열이 처리되지 않았다고 가정하면 내 질문은 COM 에서이 작업을 수행하는 패턴은 무엇입니까? 할당 된 문자열이 포함 된 변형을 어떻게 전달해야하고, AddProperty라는 스레드가 먼저 죽었더라도 다른 스레드에 해당 문자열을 사용할 수있게하고 문자열을 올바르게 할당 할 수 있습니까?

도움이 되었습니까?

해결책

대부분의 경우 문자열 또는 변형으로 COM 기능을 호출 할 때 필요한 유일한 garantuee는 해당 객체가 통화 자체 전체에서 사용할 수 있다는 것입니다. 통화 후 객체 자체는 데이터 사본을 만드는 책임이 있습니다. 예를 들어, Variant 's는 문자열을 복사하고 COM 객체를 복사하는 변형 검정 함수를 사용합니다 (참조 수 증가). 걱정해야 할 유일한 것은 변형에서 실제 인터페이스를 통과 할 때입니다.이 경우 인터페이스를 올바르게 참조하고 QueryInterface, AddRef 및 릴리스를 모두 구현해야합니다. 참조 수가 0에 도달하기 전에 해당 객체를 처리하지 마십시오.)

편집 : 오, COM 프로그래밍에 대해 더 배우려면 "Don Box"로 "Essential Com"을 받아야합니다. 돈 상자입니다 그만큼 Com Guru, 그리고 그 책은 Com 등에 대해 알고 싶은 거의 모든 것을 가르쳐 줄 것입니다.)

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