如何解决 Clipboard.GetDataObject()'这句出错

liuchongqing 2007-04-27 01:11:39
从AxMSChart复制图象到剪贴板然后在粘贴到PictureBox,出现错误,请帮忙,代码如下:
AxMSChart1.EditCopy() '复制图象到剪贴板,手工在EXCEL中可以粘贴
Dim data As IDataObject'声明
data = Clipboard.GetDataObject()'这句出错
If (data.GetDataPresent(DataFormats.Dib)) Then
Me.PictureBox1.Image = data.GetData(DataFormats.Dib)
End If


错误信息如下:

检测到 FatalExecutionEngineError
Message: 运行库遇到了错误。此错误的地址为 0x7a005c3d,在线程 0xc98 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
...全文
732 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
家对面大石头 2010-05-30
  • 打赏
  • 举报
回复
楼上的C#在怎么整?
deepblue37 2009-02-01
  • 打赏
  • 举报
回复
楼上很猛,分析的很好,十分的学习.
无名de旅人 2008-12-29
  • 打赏
  • 举报
回复
我也碰到你一样的问题,汗!将近两年前的帖子了,没办法,只能自己摸索。

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

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

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

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

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文件(*.bmp)|*.bmp"
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()


如果对你有用,那就给我加点分!!!!!

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧