0

C ++ COMアプリケーションをUnicodeに移行しています。この移行の一環として、IDLの定数文字列もUnicodeに移行します。

問題は、現時点では、ANSIとUNICODEの両方でコンパイルしていることです。つまり、L"String"構造を使用して幅の広いグラフを宣言することはできません。

現時点では、文字列定数は次のように定義されています。

const LPSTR STRING_CONST_NAME = "STRING VALUE";

そして、次のように定義します。

const LP T STR STRING_CONST_NAME = "STRING VALUE";

通常のコードの場合は、UnicodeでコンパイルするときにL "STRING VALUE"に変換する_T( "STRING VALUE")マクロを追加するだけです。

しかし、私が見ることができることから、_Tは純粋なC ++構造であるため、IDLでは使用できません。

私たちのアプローチは正しいですか?何があっても、このように定義する必要があるかもしれません。

const LP T STR STRING_CONST_NAME = L "STRING VALUE";

4

2 に答える 2

2

とにかく、なぜIDLファイルに文字列定数が必要なのだろうか。それらをヘッダーファイルに入れるだけで十分ではないでしょうか?Microsoftにはsapiaut.idl(すべてのプラットフォームSDK IDLファイルを見る)にのみワイド文字列リテラルがあることがわかります。これらのいくつかの定数は使用されないため、これも間違いである可能性があります。また、これらの定数はとして定義されていることに注意してBSTRください。

それらをIDLファイルに入れたい場合は、cpp_quoteで十分な場合があります。

文字通りIDLでそれらを絶対に必要とする場合は、を使用#ifdefして2つの異なる定義を設定できます。その場合は、2つの異なるタイプライブラリ、個別のインターフェイスセット、異なるUUIDなども必要です。

于 2009-08-23T08:23:08.063 に答える
0

常にUnicodeであると想定されている場合は、「T」構文を使用しても意味がありません。

  const LPCWSTR STRING_CONST_NAME = L"STRING VALUE";

「W」は「ワイド」を意味します-

Windowsで定義されたLPC*STR typedefがIDLとどのように相互作用するかはわかりませんが、LPSTRが機能する場合は、さまざまなものも機能するはずです。

于 2009-08-23T08:05:35.227 に答える