我正在从Visual Studio 6迁移到Visual Studio 2008,并且具有要使用的名为SetDefaultPrinter的组件的功能。

不幸的是,现在有一个同名的Windows库函数SetDefaultPrinter。与之关联的宏正在妨碍我使用我的函数。

这是我必须调用我的函数的解决方法:

#undef SetDefaultPrinter
    pNova->SetDefaultPrinter();
#ifdef UNICODE
#define SetDefaultPrinter  SetDefaultPrinterW
#else
#define SetDefaultPrinter  SetDefaultPrinterA
#endif // !UNICODE


有没有一个比较丑陋的方法呢?不,我无法控制该外部组件来更改函数的名称。

最佳答案

这就是C ++添加名称空间的原因。太糟糕了,Windows定义无法使用它们。

在另一个不包含windows.h或任何其他Windows包含文件的源模块中,生成一个存根函数来调用您的冲突函数。

void MySetDefaultPrinter(CNova * pNova)
{
    pNova->SetDefaultPrinter();
}

关于c++ - 预处理器忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/912946/

10-11 16:29