軟件定制開(kāi)發(fā)_關(guān)于 WPF下 ReportViewer 導(dǎo)出成PDF時(shí)報(bào)
發(fā)布時(shí)間:Mar 17, 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ì)稱(chēng)。原因可能是托管的 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ò)誤,。