IDLでワイド文字定数を宣言する方法
質問
私たちは、ユニコードなるために私たちのC ++ COMアプリケーションを移行しており、この移行の一環として、我々としてもUnicodeに私たちのIDLで定数文字列を移行したい。
問題は、現時点では、我々はまだANSIにし、UNICODEの両方でそれをコンパイルすることで、我々はLを使用することができないことを意味し、「文字列」ワイドチャートを宣言するために構築します。
現時点では、私たちの文字列定数は次のように定義されます:
CONST LPSTR STRING_CONST_NAME = "文字列値"
そして、私たちはこのようにそれを定義したい:
CONST LPの T のSTR STRING_CONST_NAMEは= "文字列値"
それは通常のコードであれば、私たちはただ_T(「文字列値」)「文字列値」Unicodeでコンパイルするとき、
Lにそれを変換していたマクロを追加しますしかし、私は_Tは、純粋なC ++構築物であるので、我々はIDLで使用することはできません見ることができるものから。
私たちのアプローチにも正しいですか?関係なく、我々はこのようにそれを定義しなければならないことはないかもしれないもの:
CONST LPの T のSTR STRING_CONST_NAME = のL の "文字列値"
解決
私は疑問に思います。ヘッダファイルにそれらを持ってするのに十分ではないでしょうか?私は、Microsoftが(すべてのプラットフォームSDK IDLファイルを見て)のみsapiaut.idlでワイド文字列リテラルを持っていることを確認します。それらのいくつかの定数が使用されることはありませんように、これは同様に、間違いだったかもしれません。また、これらの定数はBSTR
のように定義されていることがわかります。
あなたはIDLファイルでそれらをしたい場合は、それは彼らをcpp_quoteするのに十分かもしれません。
あなたは絶対に文字通りIDLでそれらをしたい場合は、は、次の2つの異なる定義を持っている#ifdef
を使用することができます。その場合、あなたはまたように異なるのUUIDで、インターフェースの別々のセットで、二つの異なるタイプライブラリを持っている、とする必要があります。
他のヒント
それは常にUnicodeことになっている場合は、「T」を使用して何の使用はありません構築 - ちょうど行う;
const LPCWSTR STRING_CONST_NAME = L"STRING VALUE";
"W" は "広い" のためである -
わからないどのようにWindowsの定義LPC * IDLとSTRのtypedefの相互作用が、LPSTRが働いていた場合、多種多様な、あまりにも、動作するはずです。