2017-02-05 14 views
0

저는 COM 클라이언트를 작성하고 있습니다. 내 COM 서버의 기능 중 하나는 인수로 열거 소요 (긴) 번호는 다음과 같습니다 반환합니다 (I는 초기와 후기 바인딩을 모두 사용하고enum을 _variant_t로 변환하십시오. C++

기능 GetFlowsheetStatus (FlowSheetObjStatusFlag_enum으로 iQueryFlags) 한 IDispatch 및 직접 인터페이스) 그래서 뭔가 쓴 : FlowSheetObjStatusFlag_enum 플래그; _variant_t p = _variant_t (플래그);

그래서 전달할 수 있으려면 열거 형 "FlowSheetObjStatusFlag_enum"을 _variant_t로 변환해야합니다. 어떻게해야합니까?

+0

왜 변형으로 변환해야한다고 생각합니까? 게다가 "this like looks"예제는 C++이 아닌 VBA 또는 VB6처럼 보이지만 C++을 요청합니다. 분명히 해줄 수 있니? –

+0

의견을 보내 주셔서 감사합니다. 내가 변종 이외의 아무것도 전달하려고, HRESULT 오류를 반환합니다. 이 예제는 VBA로 작성된 COM 서버 설명서에서입니다. – Peet

+0

해당 VBA 서명을 사용하여 Variant를 잘못 사용했습니다. 자동화 (IDispatch 메서드 호출)를 통해 라이브러리를 사용하지 않는 한 언급하지 않았지만 어려운 방법입니다. 또는 예가 거짓말 (항상 가능) 한 경우. 예제가 거짓말이 아니라고 가정하고, C++ 일 경우 올바른 데이터 유형을 전달할 수도 있고 컴파일하지 않을 수도 있습니다. 그래서 "returns error"에서 혼란스러워합니다. 전달할 올바른 "enum"정의는 형식 라이브러리를 C++ 코드에 통합 한 방법에 따라 다릅니다. 예를 들어, # import를 사용한 경우, 생성 된 C++ 파일을 검사하여 열거 유형의 이름을 판별하십시오. –

답변

0

내 실수는 내가 내 자신의 열거 형을 생성 및 자동화를 통해 통과하고 싶다고했다. 나는 서버에 의해 노출 된 enum을 발견함으로써 문제를 해결했다. 내 실수는 동일한 열거 형을 작성하는 것이 었습니다. 노출 된 열거 형은 서버를 통해 생성 되었기 때문에 이미 호환 가능하다고 생각됩니다.

0

저는 COM에 익숙하지 않지만 C++은 한 유형에서 다른 유형으로 변환 할 수 있습니다.

  • static_cast 파생 유형으로 기본 형식을 캐스팅 아래로 또 다른 호환 유형
  • dynamic_cast (즉 intdouble에) 1 개 유형을 캐스팅 사용해야
  • reinterpret_cast 당신이 절대적으로 그것을 사용해야한다면. 형식을 취하고 "이 형식이 아니라 대신이 형식으로 처리합니다."라고 말합니다.
    (즉 int x = reinterpret_cast<int>(std::string{"my string hello"});)
  • const_cast멀리 CONST 다움을 캐스팅하기 위해 주로 사용하지만 너무 CONST 다움을 제공하는 데 사용할 수 있습니다. 나는 어쨌든 깊이 그것을 여기에 나열 할 것이라고 생각했습니다.

자세한 내용은이를 읽어야 http://en.cppreference.com/w/cpp/language/explicit_cast