私はVisual Studio 6からVisual Studio 2008に移行しており、使用しているコンポーネントの機能はSetDefaultPrinter
です。Preproccessor ignore
残念ながら、同じ名前のウィンドウライブラリ関数SetDefaultPrinter
があります。そして、それに関連するマクロは私の機能を使って私の道に入りつつあります。
これは私が私の関数を呼び出す必要があり、私の回避策です:
#undef SetDefaultPrinter
pNova->SetDefaultPrinter();
#ifdef UNICODE
#define SetDefaultPrinter SetDefaultPrinterW
#else
#define SetDefaultPrinter SetDefaultPrinterA
#endif // !UNICODE
はこの周りあまり醜い方法はありますか?また、関数の名前を変更するために外部コンポーネントを制御することはできません。
残念ながら、MicrosoftはほとんどのWin32 APIがマクロになって以来、ここでは名前空間を無駄にしていました。 SetDefaultPrinterはマクロ(SetDefaultPrinterAまたはSetDefaultPrinterWへのマッピング)であり、その名前は名前空間のスコープを尊重しません。 悪いデザインとWTFの瞬間があるAPIでは、これは最大のものの1つでなければなりません。残念ながら、私たちはそれに固執しているようです。 – jalf
@jalf - 完全に合意しました。私はそれがWindows APIを完全にC互換に保つという要件から生まれたものだと考えていますが、関係する妥協は本当に残念です。ヘッダーには、C++用とC用の2つのセクションが必要です。 –