迷一样的二次调用?求解

问题描述

view_dir.SmallImageList.Images.Add(GetFileIcon(f.FileType.Name,SHGFI.SmallIcon));

view_dir是ListView,SmallImageList已初始化,GetFileIcon是调用API获取图标的函数,f.FileType.Name不为空,这是基本情况然后问题来了当GetFileIcon()return了值之后,该行代码的下一句并没有执行,就再一次调用了GetFileIcon(),并且此时的第一个参数变成了null,第二个参数不变我在GetFileIcon()的return处,和该行代码的下一行代码处,都设置了断点。而f.FileType.Name我也检查过了,不为null。我用断点查看,执行顺序大概如此:GetFileIcon(".jpg",SHGFI.SmallIcon)↓returnicon↓GetFileIcon(null,SHGFI.SmallIcon)↓出错已经试过,如果在GetFileIcon()内增加第一个参数的判断,整体代码能正常执行但如果不增加判断则会出错,但第一个参数没找到过null的情况,只有在执行进去了之后才有null

解决方案

本帖最后由 dyx726 于 2015-08-05 08:57:31 编辑
解决方案二:
貌似问题找到了…是GetFileIcon()里获取到的icon没有释放内存导致内存混乱……?虽然我的ImageList引用着但貌似还是有问题,要用clone复制一份然后释放掉api的icon指针…
解决方案三:
GetFileIcon必须在外部释放。

时间: 2024-07-29 04:10:41

迷一样的二次调用?求解的相关文章

c#-C# Image类里的方法无法调用,求解

问题描述 C# Image类里的方法无法调用,求解 想使用image.FromStream方法显示存储在数据库中的图片. 但是发现FromStream不能被顺利调用 ,说image.exe文件缺失?用的版本是2010的C# 使用了命名空间using System.Drawing.Imaging; 不知道有什么方法可以解决,怎么样才能正常调用image下的方法,现在下面只能看到Form1控件,system{} 具体方法的代码如下: private void button2_Click(object

【Qt编程】基于Qt的词典开发系列<十二>调用讲述人

       我们知道,win7系统自带有讲述人,即可以机器读出当前内容,具体可以将电脑锁定,然后点击左下角的按钮即可.之前在用Matlab写扫雷游戏的时候,也曾经调用过讲述人来进行游戏的语音提示.具体的Matlab脚本文件如下: sp=actxserver('SAPI.SpVoice');sp.Speak('你好,欢迎来到西安电子科技大学!Hello,Welcome to XD University!')        Qt调用讲述人,需要使用专门的类,具体可以参考http://lynxlin

Android学习Scroller(二)——ViewGroup调用scrollTo()

PS: 该篇博客已经deprecated,不再维护,详情请参见  站在源码的肩膀上全解Scroller工作机制  http://blog.csdn.net/lfdfhl/article/details/53143114 MainActivity如下: package cc.ac; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.

【FFMpeg视频开发与应用基础】二、调用FFmpeg SDK对YUV视频序列进行编码

<FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK>视频教程已经在"CSDN学院"上线,视频中包含了从0开始逐行代码实现FFMpeg视频开发的过程,欢迎观看!链接地址:FFMpeg视频开发与应用基础--使用FFMpeg工具与SDK 工程代码地址:FFmpeg_Tutorial 视频由像素格式编码为码流格式是FFMpeg的一项基本功能.通常,视频编码器的输入视频通常为原始的图像像素值,输出格式为符合某种格式规定的二进制码流. 1.FFMpeg进行视频编码所需要的

spring跨域服务调用求解

问题描述 目前有端口分别为70和71的两个服务,我想在70里调用71的bean,请问有解决之道吗?

java程序调用xfire发布的webService服务(二)

在上一篇的调用xfire发布的webService服务中,我只是从服务端返回了一个字符串给客户端,却没有测试从客户端传递数据给服务端.而实际应用中一般是不太可能只出现这样的应用场景的,因此我便更进一步测试了客户端传递数据给服务端. 因为相关的jar包在上一篇已经说过,因此便不再重复说明,这次的测试步骤如下: 一.测试向服务端传递字符串(重点在第二个):     为了进一步理解服务搭建,我重新写了一个服务端服务类: 接口: package xfireTest; public interface X

为什么代理会被调用了二次?

问题描述 怪怪的,为什么网站计数器会刷新一次会自动计算二次呢?在代理中作了messagebox,显示代理被调用了二次.而我在webqueryopen中仅作了一次@command([ToolsRunMacro];"counter")之后我分步检查记录如下:我做了如下操作:第一步:取消掉webqueryopen中的调用代理之后,计数器(代理)无效.正常,说明问题在计数器这个代理上.第二步:删除计数器.网站显示出错,说明计数器有效正常.这说明问题应该在计数器(代理)的代码中.第三步:检查代码

算法实践——舞蹈链(Dancing Links)算法求解数独

在"跳跃的舞者,舞蹈链(Dancing Links)算法--求解精确覆盖问题"一文中介绍了舞蹈链(Dancing Links)算法求解精确覆盖问题. 本文介绍该算法的实际运用,利用舞蹈链(Dancing Links)算法求解数独   在前文中可知,舞蹈链(Dancing Links)算法在求解精确覆盖问题时效率惊人. 那利用舞蹈链(Dancing Links)算法求解数独问题,实际上就是下面一个流程 1.把数独问题转换为精确覆盖问题 2.设计出数据矩阵 3.用舞蹈链(Dancing L

.Net组件程序设计之异步调用

说到异步调用,在脑海中首先想到就是BeginInvoke(),在一些常用对象中我们也会常常见到Invoke()和 BeginInvoke(), 要想让自己的组件可以被客户端调用或者是异步调用,这样的设计是合理的,这也是组件异步机制当中的一条 (说句题外话--其实大多数知识都隐藏在我们平时经常见到的对象或者是代码里,只不过是没有去细心的发现) 在.NET中首先就会想到使用委托来进行异步调用,关于委托的定义在 委托与事件一文中已经大概的说过了,文中只是对委托进行了 大概的讲解,并没有对委托的使用来说