我正在從Visual Studio 6遷移到Visual Studio 2008,並且我有一個使用名爲SetDefaultPrinter
的組件的功能。預處理程序忽略
不幸的是,現在有一個windows庫函數,SetDefaultPrinter
,具有相同的名稱。與此相關的宏正在妨礙我使用我的功能。
這是我的解決辦法我有打電話給我的功能:
#undef SetDefaultPrinter
pNova->SetDefaultPrinter();
#ifdef UNICODE
#define SetDefaultPrinter SetDefaultPrinterW
#else
#define SetDefaultPrinter SetDefaultPrinterA
#endif // !UNICODE
有沒有解決這個不那麼醜陋的方式?不,我無法控制該外部組件來更改函數的名稱。
不幸的是,微軟在這裏設法使命名空間毫無用處,因爲幾乎整個Win32 API都變成了宏。 SetDefaultPrinter是一個宏(映射到SetDefaultPrinterA或SetDefaultPrinterW),因此名稱不會遵守命名空間範圍。 在一個充滿糟糕設計和WTF時刻的API中,這必須是最大的一個。不幸的是,似乎我們一直在堅持下去。 – jalf 2009-05-26 22:09:27