关于 Winform 下 ReportViewer 打印异常

想必有不少朋友做过 WinForm 下的 ReportViewer 应用,在功能打印和导出PDF时会遇到一个异常:

检测到 PInvokeStackImbalance
Message: 对 PInvoke 函数“Microsoft.ReportViewer.Common!Microsoft.ReportingServices.Rendering.ImageRenderer.CompositionPDF+WindowsGDIWrapper::GetGlyphIndicesW”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。


关于这个问题,MS语焉不详,而其它通过修改DLL引用方法的方式对于 Microsoft.ReportViewer.Common 和 Microsoft.ReportViewer.WinForms 也是无能为力。

近日,本人在测试程序时发现,这个问题总是在调试时发生,而程序发布之后,这个问题就不再出现了。

做了几个小测试,发现,删除  xxxxxx.pdb (放置ReportViewer控件的)后,测试就可以顺利通过,

问题解决了,探讨原因:调试宿主的签名与程序签名不一致,致使某些异常发生,引发这个DLL的调用错误。
posted @ 2007-12-07 13:57  置身珠海,学习与奋斗  阅读(1564)  评论(1编辑  收藏  举报