從 PUDN 上下載了讀取 EXCEL 文件的程序,剛開始編譯不通過,主要是因爲循環變量定義位置的問題,好解決!
但編譯通過後,運行程序即出現錯誤:
ExcelAccess.exe 中的 0x1026ed6a (msvcr90d.dll) 處未處理的異常: 0xC0000005: 讀取位置 0x00000000 時發生訪問衝突
出錯的代碼如下:
- LPLOGFONT CPPToolTip::GetSystemToolTipFont() const
- {
- static LOGFONT LogFont;
- NONCLIENTMETRICS ncm;
- ZeroMemory(&ncm,sizeof(NONCLIENTMETRICS));
- ncm.cbSize = sizeof(NONCLIENTMETRICS);
- if (0 == SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0))
- {
- TRACE("Error of SystemParametersInfo is %d/r/n",GetLastError());
- return FALSE;
- }
- memcpy(&LogFont, &(ncm.lfStatusFont), sizeof(LOGFONT));
- return &LogFont;
- }
修改方法:
ncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(ncm.iPaddedBorderWidth);
原因:
由於從 Vista 和 Windows Server 2008 開始,NONCLIENTMETRICS 在最後增加了 iPaddedBorderWidth 字段。
如果程序打算同時支持 vista 和 XP,Windows 2000, Windows Server 2003,那麼應該先調用 GetVersionEx() 檢測Windows版本,然後決定是否需要減去 sizeof (ncms.iPaddedBorderWidth) 。