문제

COM 인터페이스 메소드가 다음과 같이 선언되었습니다.

[ object,
  uuid(....),
]
interface IFoo : IUnknown 
{
  HRESULT Foo([in, out] CACLSID * items);
}

마샬링과 관련하여 서버가 계산 된 배열을 재 할당 할 수 있습니까? (나 생각한다 그것은 더 이상 확실하지 않습니다)

현재 구현은 기존 ID 만 대체하지만 새 인터페이스를 도입하지 않고 더 많은 항목을 반환 할 수있는 변경 사항 (계약을 중단하지 않음)을 구현하고 싶습니다.

편집하다 점에 유의하시기 바랍니다 Caclsid 카운트와 포인터가 포함 된 배열입니다.

도움이 되었습니까?

해결책

나는 오랫동안 COM을하지 않았지만 새 배열을 할당하는 것도 가능합니까? 이 경우에는 그렇지 않아야합니다 CACLSID ** items ?

다른 팁

이 COM 라이브러리를 사용하여 요소를 사용하여 많은 수의 요소에 대한 공간을 나타내는 두 번째 매개 변수로 카운트를 제공해야합니다.

먼저, 원한다면 Foo 내 배열을 수락하려면 카운트를 제공하는 매개 변수를 추가해야합니다.

HRESULT Foo([in] int cItems, [in, out, size_is(cItems)] CACLSID * items);

경고 :이 코드는 컴파일되지 않았으며 문서화를 꺼냅니다.

둘째, 선언을 변경하지 않고는이 방법의 외부 동작을 수정할 수 없습니다. 크기 조정을 지원하려면 배열을 재 할당하고 주소를 전달할 수 있어야합니다. 당신은 a를 사용할 수 있습니다 SAFEARRAY 또는 선언합니다 cItems 그리고 items 원래 유형으로의 포인터로 Foo 예를 들어 :

HRESULT FooMutate([in, out] int *cItems, [in, out, size_is(*cItems)] CACLSID **items);

다시, 컴파일되지 않으므로, 당신은 이것을 사용하면 실제로 무엇을하고 있는지 알아야합니다.

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