在以下代码中:
// If GetPrinter didn't fill in the DEVMODE, try to get it by calling
// DocumentProperties...
if (pi2->pDevMode == NULL)
{
    dwNeeded = DocumentProperties(NULL, hPrinter,
        printerName,
        NULL, NULL, 0);
    if (dwNeeded <= 0)
    {
        GlobalFree(pi2);
        ClosePrinter(hPrinter);
        return FALSE;
    }
    pDevMode = (DEVMODE *)GlobalAlloc(GPTR, dwNeeded);
    if (pDevMode == NULL)
    {
        GlobalFree(pi2);
        ClosePrinter(hPrinter);
        return FALSE;
    }
    lFlag = DocumentProperties(NULL, hPrinter,
        printerName,
        pDevMode, NULL,
        DM_OUT_BUFFER);
    if (lFlag != IDOK || pDevMode == NULL)
    {
        GlobalFree(pDevMode);
        GlobalFree(pi2);
        ClosePrinter(hPrinter);
        return FALSE;
    }
    pi2->pDevMode = pDevMode;
}
在线上
lFlag = DocumentProperties(NULL, hPrinter,
printerName,
pDevMode, NULL,
DM_OUT_BUFFER);
当我运行 Visual Studio 2012“代码分析”功能时,它会引发警告:
C6386 写入溢出 写入“pDevMode”时缓冲区溢出:可写大小为“dwNeeded”字节,但可能写入“220”字节。对“pDevMode”的无效写入,(超出其可写范围)
代码运行良好,但想知道如何解决此警告的发生(最好不禁用警告)
这个错误的帮助页面似乎不适用(或者我不知道它是怎么做的)http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(C6386) &rd=真