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