2009-05-15 5 views
1

COM에서 키 - 값 쌍 배열을 허용 할 수있는 API를 사용하여 인터페이스를 만들고 싶습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? BSTR의 SAFEARRAY를 전송할 수 있습니다. 각 BSTR은 키 - 값 쌍으로 간주 될 수 있습니다. 패킹/언 패킹 키 - 값 논리를 추가해야합니다.COM에서 키 - 값 쌍 배열을 API에 전송하는 가장 좋은 방법

답변

1

문자열이 아닌 용도로 BSTR을 사용하지 않습니다. 나노초를 절약 할 수 있지만 코드를 확장하거나 포트해야하는 경우 문제가 발생할 수 있습니다. 나는 인덱스 0, 2, 4 ...의 키들과 1, 3, 5, ...의 변형들을 SAFEARRAY로 사용한다.

2

키 - 값을위한 인터페이스를 도입 할 수있다. 쌍과 같은 쌍의 컬렉션에 대한 다른 하나.

0

"최고"를 정의해야합니다. COM은 디자이너의 최고의 소망에도 불구하고 매우 이기종 플랫폼입니다. 객체의 상호 작용을 기대하는 클라이언트의 특성 (일명 어떤 언어?)은 선택에 큰 영향을 미쳐야합니다.

그냥이 빠른 예 : ASP를 클래스라는로부터

  • 를 호출되고?
    유일한 도구는 변형입니다. Ok - ATL을 사용하고 있습니다. 유일한 도구는 BSTR 또는 SAFEARRAY 중 하나입니다.

  • C++에서 호출 되었습니까?
    맞춤 데이터 배열을 사용할 수 있습니다 ([size_is]에서 읽음). 가능하다면 고정 크기의 배열 일 수도 있습니다. 양면에서 쉽게 톤수가됩니다.

    클라이언트를 작성 :

는 다른 고려 사항이 있습니까? 그렇다면 당신은 양쪽 모두를 더 편하게하고 싶습니다.

개체 만 쓰고 있습니까? 그렇다면 은 클라이언트에서 이 가장 딱딱하고이고 서버에 이어도 클라이언트에서 가장 쉽게을 만들려고합니다. (왜? 상대방이 특히 컨설팅 또는 상업 환경에서 당신과 함께 일하는 것을 행복하게 생각하기를 원합니다. 게으르다!).

또한 일회용 개체입니까? 또는 미래에 여러 상황에서 사용될 것입니까? 전자의 경우에는 실제로 중요하지 않다는 것을 알 수 있습니다. 후자의 경우 철저하게 생각하는 것이 좋습니다.

상황에 대한 자세한 내용을 게시하는 경우보다 구체적인 지침을 제공 할 수 있습니다.

0

이렇게하려면 표준 방법으로 IPersistPropertyBag을 고려하십시오.

OLE 속성 집합 개체를 고려하십시오.

더 빠르고 더러운 것을 만들려면 Scripting.Dictionary 개체 또는 ADODB.Record을 수락하는 것이 좋습니다.

관련 문제