企業(yè)定制軟件開發(fā)_關于WPF下ReportViewer導出成PDF時
發(fā)布時間:Mar 14, 2022
已有 人瀏覽
想必有不少朋友做過 WinForm 下的 ReportViewer 應用,在功能打印和導出PDF時會遇到一個異常:
檢測到 PInvokeStackImbalance
Message: 對 PInvoke 函數(shù)“Microsoft.ReportViewer.Common!Microsoft.ReportingServices.Rendering.ImageRenderer.CompositionPDF+WindowsGDIWrapper::GetGlyphIndicesW”的調(diào)用導致堆棧不對稱,。原因可能是托管的 PInvoke 簽名與非托管的目標簽名不匹配。請檢查 PInvoke 簽名的調(diào)用約定和參數(shù)與非托管的目標簽名是否匹配,。
關于這個問題,,MS語焉不詳,而其它通過修改DLL引用方法的方式對于 Microsoft.ReportViewer.Common 和 Microsoft.ReportViewer.WinForms 也是無能為力,。
在網(wǎng)上搜,,發(fā)現(xiàn)也有很多人遇到這個問題。
用了一個友網(wǎng)的辦法:
測試程序時發(fā)現(xiàn),,這個問題總是在調(diào)試時發(fā)生,,而程序發(fā)布之后,這個問題就不再出現(xiàn)了,。
做了幾個小測試,,發(fā)現(xiàn),刪除 xxxxxx.pdb (在可執(zhí)行程序目錄刪除所有的 *.pdb)(放置ReportViewer控件的)后,,測試就可以順利通過,,
問題解決了,探討原因:調(diào)試宿主的簽名與程序簽名不一致,,致使某些異常發(fā)生,,引發(fā)這個DLL的調(diào)用錯誤。