VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了关于.net中使用axmschart控件editcopy方法的问题!大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

从AxMSChart复制图象到剪贴板然后再导出图片,出现错误,代码如下:
Dim iBitmap As System.Drawing.bitmap

AxMSChart1.EditCopy()
iBitmap =Clipboard.GetImage

错误信息如下:

检测到 FatalExecutionENGIneError
message: 运行库遇到了错误。此错误的地址为 0x7a005c3d,在线程 0xc98 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。

我猜测可能是mschart迁移到到.net之后出现的问题,单独用editcopy没问题,用画板可以读取内存里

的图片,用Clipboard.GetImage方法也没问题,但两者在一起就有问题,我估计可能editcopy方法独

占了剪贴板(我还是不相信)?亦或者editcopy线程不安全?具体到现在我也不太清楚,反正就不能简单共存

(以前VB里就这么用的)。

我也试着从网友介绍的用单线程、提升权限角度解决问题,但都没成功。既然我发现使用完

editcopy方法后用windows自带的画板能读取,就联想到我用api函数来读取clipboard行不行呢?经过

测试后,发现果然可以,我用vb.net的代码写的过程,大家可以参一下:


声明:
Private const cF_BITMAP As Short = 2
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Integer) As

Integer
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As

Integer
Private Declare Function CloseClipboard Lib "user32" () As Integer

功能过程代码:
Dim iBitmapPtr As Integer
Dim iBitmap As System.Drawing.bitmap

Me.AxMSChart1.EditCopy()
OpenClipboard(Me.Handle.ToInt32)
iBitmapPtr = GetClipboardData(CF_BITMAp)
iBitmap = System.Drawing.bitmap.FromHbitmap(iBitmapPtr)
If iBitmap Is Nothing Then
messageBox.Show("获取Chart图像失败!","消息",messageBoxButtons.OK,

messageBoxIcon.Error) Else Me.SaveFileDialog1.Filename = "" Me.SaveFileDialog1.Filter = "BMP文件(*.bR_916_11845@p)|*.bR_916_11845@p" Me.SaveFileDialog1.overwritePrompt = True If Me.SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.oK Then If System.IO.File.Exists(Me.SaveFileDialog1.FileName) = True Then System.IO.File.delete(Me.SaveFileDialog1.FileName) End If iBitmap.Save(Me.SaveFileDialog1.FileName) End If End If CloseClipboard()

大佬总结

以上是大佬教程为你收集整理的关于.net中使用axmschart控件editcopy方法的问题!全部内容,希望文章能够帮你解决关于.net中使用axmschart控件editcopy方法的问题!所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。