在C#的Windows Forms中使用Preview Handler的实践

本文介绍了在C#的Windows Forms中使用Preview Handler预览文件时遇到的调试难题,包括无法在C#中调试C++代码以及栈空间破坏的异常。通过深入分析,发现问题是由于C#代码中Marshal.WriteInt64()导致的内存越界,解决方案是将C#代码的long类型改为int,WriteInt64()改为WriteInt32()。此案例强调了跨语言开发时需要注意类型定义的正确性。
摘要由CSDN通过智能技术生成

最近,我们收到一些客户的需求,希望能在C#语言环境中预览我们软件的绘图格式文件。
我们之前提供了一些API可以操作文件数据,但是没有预览功能。最可行的方法,就是通过ExportImage的API导出一些图像文件,再到C#里面用图像控件显示出来。但是,这种做法非常低效,因为有不必要的文件操作,会影响显示速度。

通过参考我们以前实现过的一个预览控件,可以提供一些解决方案给我们的C#用户。
这个控件的能力是可以在Windows File Explorer中直接预览选中的文件。
例如:
Windows File Explorer

而这个解决方案的例子,可以从下面这个大神的博客中找到。
https://www.brad-smith.info/blog/archives/183

最后,我们的解决方案是大致这样的:
Preview Handler


不过,令人感到沮丧的是,这个大神的例子存在问题。
主要有两点:
1. 无法使用debug版的预览控件
2. 无法从C#环境里调试由C++写的控件代码
为了解决第一点,需要第二点的能力。而第二点对我来说,是一个陌生的技术问题。

一般来说,通过尝试在预览控件代码里加入DebugBreak(),我们期望能中断程序并进行调试。
但是,不幸的是,在这个例子的C#环境里,C++代码的DebugBreak并不起作用。哪怕我加入一个MessageBox()来强行中断程序,我在调用堆栈里看到的仍然是无法解读的信息。
CallStackNoNative

失去了调试能力,就无法知道问题发生的原因,更无法找到解决问题的办法。
于是,我们开始查找如何在C#环境里调试C++代码?
结果,我们发现了这个。
https://stackoverflow.com/questions/4354411/debugging-native-cod

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值