문제

우리는 C ++ COM 응용 프로그램을 유니 코드로 마이그레이션하고 있으며이 마이그레이션의 일부로 IDL의 상수 문자열을 유니 코드로 마이그레이션하고 싶습니다.

문제는 현재 ANSI와 유니 코드 모두에서 여전히 컴파일하는 것입니다. 즉, L "문자열"구성을 사용하여 넓은 차트를 선언 할 수 없습니다.

현재, 우리의 문자열 상수는 다음과 같이 정의되었습니다.

const lpstr string_const_name = "문자열 값";

그리고 우리는 다음과 같이 정의하고 싶습니다.

Const LPstr string_const_name = "문자열 값";

일반 코드 인 경우 유니 코드에서 컴파일 할 때 L "String 값"으로 변환 한 _t ( "String value") 매크로를 추가합니다.

그러나 내가 볼 수있는 바에 따르면 _t는 순수한 C ++ 구성이기 때문에 IDL에서 사용할 수 없습니다.

우리의 접근 방식이 정확합니까? 무엇이든지 이렇게 정의해야 할 수도 있습니다.

Const LPstr string_const_name = "문자열 값";

도움이 되었습니까?

해결책

어쨌든 IDL 파일에 문자열 상수가 필요한 이유가 궁금합니다. 헤더 파일에 넣는 것만으로는 충분하지 않습니까? Microsoft는 sapiaut.idl에만 광범위한 문자열 리터럴을 가지고 있음을 알 수 있습니다 (모든 플랫폼 SDK IDL 파일을보고). 그 소수의 상수가 사용되지 않기 때문에 이것은 실수 일 수 있습니다. 또한 이러한 상수는 다음과 같이 정의됩니다 BSTR.

IDL 파일에서 원한다면 CPP_QUOTE로 충분할 수 있습니다.

문자 그대로 IDL에서 절대적으로 원한다면 #ifdef 두 가지 다른 정의를 갖습니다. 이 경우, 두 개의 다른 유형 라이브러리가 있어야하며, 다른 유형의 인터페이스 세트, 다른 UUID 등이있는 등이 있어야합니다.

다른 팁

항상 유니 코드 인 경우 "T"구조를 사용하는 사용은 없습니다.

  const LPCWSTR STRING_CONST_NAME = L"STRING VALUE";

"W"는 "넓은"것입니다.

Windows 정의 된 LPC*str가 어떻게 IDL과 상호 작용하는지 확실하지 않지만 LPSTR이 작동하면 다양한 다양성도 작동해야합니다.

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