/backward_compat スイッチ
/backward_compat スイッチは、RPC/COM スタブを生成するときに、いくつかの高度な機能をオフにするように MIDL コンパイラに指示します。
midl /backward_compat { maybenull_sizeis | zeroout_alignmentgap |
BSTR_byvalue_escaping | string_defaultvalue | signed_wchar_t }
スイッチ オプション
maybenull_sizeis
- MIDL コンパイル全体に [disable_consistency_check] 属性を適用します。
zeroout_alignmentgap
- マーシャリングされたバッファー内のギャップのゼロ化をオフにします。
BSTR_byvalue_escaping
- MIDL コンパイラに、BSTR の ̃\n†™ や †̃\t€ ™ などのエスケープ シーケンスを受け入れるよう指示します。
string_defaultvalue
- MIDL コンパイラが [defaultvalue] 属性の文字列を VARIANT に強制します。値を正しい型に強制する前に、 型をVT_I4します。
signed_wchar_t
- VISUAL Basic との互換性のために、wchar_t型を署名済みとして扱うように MIDL に指示します。
解説
maybenull_sizeis: [disable_consistency_check] を参照してください。
zeroout_alignmentgap: IDL がターゲット NT60 以上でコンパイルされると、MIDL によってスタブが作成され、ワイヤ バッファー内のメンバーまたは構造体間のアライン ギャップがゼロになります。 コマンド ライン スイッチ /backward_compat zeroout_alignmentgap は、MIDL にこの機能を無効にするように指示します。
次の構造例では、ワイヤ バッファーに 7 バイトのアラインメント ギャップが含まれているので、ハイパー メンバーを char メンバーの後に 8 に揃えます。 ターゲット NT60 以上の場合、スイッチを使用しない限り、MIDL はそのギャップをゼロにします。
IDL ファイル:
typedef struct _structwithgaps{ char c; // 7 byte gap to align the following hyper to 8 hyper h; } structwithgap;
このスイッチを使用すると、開示リスクが大幅に増加する可能性があり、パフォーマンスが若干向上する可能性があります。
BSTR_byvalue_escaping: 既定では、MIDL コンパイラは、文字列定数を VT_LPSTR 型またはVT_LPWSTR ™型に変換するときに、OLE オートメーションの文字列定数で ̃\ñ や †™ などのエスケープ シーケンスを処理しません。 この下位互換性スイッチ オプションを使用すると、エスケープ シーケンスが評価されます。
string_defaultvalue: MIDL コンパイラが [defaultvalue] 属性の数値文字列を VARIANT に強制します。値を正しい型に強制する前に、 型をVT_I4します。 これにより、場合によっては精度が失われる可能性があるため、このスイッチ オプションは推奨されません。
signed_wchar_t: VISUAL Basic との互換性のために、WCHAR_T型を署名済みとして扱うように MIDL に指示します。