2つのサードパーティ製のライブラリを使用するプロジェクトがあります。これらのライブラリはどちらもヘッダーファイルにTCHARを使用しています。残念ながら、1つのライブラリはマルチバイト(ライブラリaと呼ぶ)としてコンパイルされ、もう1つのライブラリはUnicode(ライブラリbと呼ばれます)としてコンパイルされます。異なる文字セットを持つライブラリ用のヘッダーファイルのTCHARの処理
ここで私が理解しているのは、ビルド・オプションに応じて、TCHARがwcharまたはcharのプリコンパイラに置き換えられていることです。したがって、ライブラリaがコンパイルされると、TCHAR型のパラメータを取るメソッドはchar型のパラメータを期待するように設定され、ライブラリbのメソッドはwchar型のパラメータを必要とするように設定されます。
残念ながら、私の消費するアプリケーションでも文字セットを選択する必要があります。私がUnicodeを選択した場合、ライブラリaに含まれているヘッダファイルには、メソッドがwcharを必要としていることがわかります。ヘッダのTCHARをコンパイルするとwcharsとして解釈されるためです。これには、構造体内に定義されたTCHARSが含まれます。実際にこの動作を確認しました.TCHARバッファを割り当てて渡すと、wcharバッファにマルチバイトデータが書き込まれるため、ガベージバックが発生します。
私の質問は次のとおりです。同じアプリケーションでこれらのライブラリを両方とも使用するきれいな方法はありますか?私はおそらく私がこれらのライブラリをどのように使っているかに何か間違っていますか?
あなたの答えをありがとう、それは私が傾いている方向です。私は手足に出て、何がばかな質問かもしれないかと尋ねるつもりです。ライブラリのヘッダファイルを編集して、構造とエクスポートされた関数のコンパイルされた定義と一致するようにラッパーを持つ利点は何ですか?私はこれがTCHARの検索と置換を行うのと同じくらい簡単であると想像しています。私はそれを単純化していますか? – MichaC
xtoflは、以下の利点を指摘しています。ラッパーでマルチバイトに変換できます。私はfind/replaceが機能するかどうかについてのフィードバックにほとんど関心があると思います。 – MichaC
ライブラリヘッダーファイルのTCHARをchar/wchar_tに置き換えるのは、ライブラリヘッダーファイルの#includeに含まれるヘッダーファイルを含め、すべてのヘッダーファイルを置き換えるだけです。あなたのライブラリによっては、いくつかの標準/システムファイルが含まれている場合があります。もう一つの欠点は、ライブラリの新しいバージョンを手に入れたときです。再度検索して交換しますか? –