軟件定制開發(fā)_關(guān)于 WPF下 ReportViewer 導(dǎo)出成PDF時報
發(fā)布時間:Mar 17, 2022
已有 人瀏覽
想必有不少朋友做過 WinForm 下的 ReportViewer 應(yīng)用,在功能打印和導(dǎo)出PDF時會遇到一個異常:
檢測到 PInvokeStackImbalance
Message: 對 PInvoke 函數(shù)“Microsoft.ReportViewer.Common!Microsoft.ReportingServices.Rendering.ImageRenderer.CompositionPDF+WindowsGDIWrapper::GetGlyphIndicesW”的調(diào)用導(dǎo)致堆棧不對稱。原因可能是托管的 PInvoke 簽名與非托管的目標(biāo)簽名不匹配。請檢查 PInvoke 簽名的調(diào)用約定和參數(shù)與非托管的目標(biāo)簽名是否匹配。
關(guān)于這個問題,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)用錯誤。