windows程序开发
文章平均质量分 95
Simple Simple
biubiubiu...
展开
-
Win32 API中内存的申请与释放
之前在做内存泄漏分析模块功能开发时,发现在windows下的输出结果并不是很准确,很多内存泄漏都显示是在windows的api或crt函数中,比如CoInitializeEx,stderror,IsOS等。 以CoInitializeEx为例,调用CoUninitialize后,它申请的内存并没有相应的free掉;stderr中,申请的内存也没释放; &原创 2022-02-16 17:05:12 · 1688 阅读 · 0 评论 -
DLL释放引起的死锁问题
DLL释放引起的死锁问题一,问题介绍二,问题分析三,问题总结一,问题介绍最近在做代码重构,今早对前两天重构的某个组件进行自测时,突然发现停止程序运行时,出现了卡死,进程退不出,查看日志发现是FreeLibrary没有走完。打开任务管理器-》性能-》资源监视器,找到进程,右键分析分析等待链,结果如下:出现了死锁,16800线程是主线程(调用FreeLibrary),12128是DLL中的工作...原创 2019-09-03 20:04:17 · 8916 阅读 · 0 评论 -
DLL的导出函数
DLL的导出函数,__declspec(dllexport),.def模块定义文件,extern “C”区别一,__declspec(dllexport)二,.DEF模块定义文件三,__declspec(dllexport)和def文件的区别1,显式调用2,隐式调用四,结论 我们在编写动态库时,经常会用到类似extern “C”, __...原创 2019-07-11 19:54:29 · 21621 阅读 · 1 评论 -
修改lib库对应的dll名称
修改lib库对应的dll名称 在某些场景下,我们需要修改lib库对应的dll名称,这当然不是简单的给dll重命名一下,或者使用notepad++等工具打开lib文件,修改其中的dll名称。后一种方式会直接导致lib文件破坏,vs编译报错。 既然不能直接从lib下手,我们可以逆向考...原创 2019-07-08 20:14:46 · 10320 阅读 · 2 评论 -
查看dll的附加依赖项
查看dll的附加依赖项一,vs的dumpbin二,depends最近做的项目除了主程序,其他都是插件,动态加载运行的,有时候缺少依赖项而运行不起来,因此总结了两种查看dll依赖项的方法。一,vs的dumpbinvisual studio编译器自带有dumpbin工具,可以通过它查看exe或者dll的依赖项。通过开始菜单打开vs命令行工具。输入dumpbin /dependents 文件名...原创 2019-06-19 19:45:54 · 12804 阅读 · 1 评论 -
LoadLibrary失败,GetLastError= 193
LoadLibrary失败,GetLastError= 193LoadLibrary失败,GetLastError报错193时,一般是加载的dll所依赖的某个dll它的依赖项不存在所报的错,可以用Dependency Walker验证该dll所依赖的加载项是否都存在。Dependency Walker安装vs时一般都自带有,如果没有也可以去官网下载http://www.dependencywal...原创 2019-06-10 09:02:40 · 17182 阅读 · 0 评论 -
内存映射文件的应用
内存映射文件的应用一,操作系统加载EXE和DLL二,读写大文件三,进程间通信 内存映射文件是windows开发下常用的一种技术,既可以用来读写磁盘上的大文件,也可以用来实现进程间的通信,本文主要对内存映射的几大用途做一个简述。一,操作系统加载EXE和DLL 当一个应用程序启动时...原创 2019-06-08 11:31:35 · 6851 阅读 · 1 评论 -
C++进程间通信之SendMessage和PostMessage
C++多进程通信之SendMessage和PostMessage1,使用介绍2,需要注意的地方3,WM_COPYDATA的原理 SendMessage和PostMessage在Win32编程中是很常见的,主要是用来发送消息到指定的窗口,一般用于工作线程传输数据到UI线程。其中SendMessage函数将指定的消息发送到一个或多个窗口。此函...原创 2019-04-28 10:27:48 · 15210 阅读 · 1 评论 -
浅析Windows程序输入法工作原理
浅析Windows程序输入法工作原理一,输入法结构介绍二,Windows消息循环捕捉键盘消息三,总结 输入法程序也是一个进程,但是我们在任务管理器中却找不到该进程,找到输入法的安装目录会发现一个后缀是.ime的文件,就是一个dll的模块,当一个进程打开输入法要输入汉字的时候其实是加载了这个模块。一,输入法结构介绍1),IMM-输入法管...原创 2018-12-23 22:28:56 · 10123 阅读 · 0 评论 -
IOCP完成端口模拟线程池
IO完成端口的使用一,样例介绍一,样例介绍生产者-消费者模式是一种非常常见的设计模式,它可以很好地模拟实际编程中的大部分使用场景,而IO完成端口也是用来实现多线程之间的通信,因此,本实例基于该模式完成。首先,我们需要创建IO完成端口,最后一个参数为0,默认创建的IO完成端口数目就是处理器数目,同时,和要创建一定数目的消费者线程,来处理数据。//创建1个IO完成端口(最后一个参数为0表示创建...原创 2018-11-08 17:55:30 · 8969 阅读 · 0 评论 -
DLL和进程的地址空间
DLL和进程的地址空间一,MT和MD的区别二,显示链接与隐式链接三,DLL和进程的地址空间DLL是Windows开发人员经常使用到的一种技术,比如我们经常会把相同功能的代码封装到一个模块中,然后供其他需要使用该模块的程序共同调用,可以降低代码的复用性,使用起来非常方便;而且,当我们需要对外部提供自己公司的接口时,也会考虑到使用dll,它可以将我们内部实现的代码进行封装保护,而不会暴露给使用者。本...原创 2018-11-05 11:38:37 · 11635 阅读 · 0 评论 -
unicode,ansi,utf-8,unicode big endian编码区别
unicode,ansi,utf-8,unicode big endian编码区别1. ASCII码2、非ASCII编码3.Unicode4. Unicode的问题5.UTF-86. Unicode与UTF-8之间的转换7. Little endian和Big endian8. 实例9. 延伸阅读1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位...转载 2018-10-18 15:04:19 · 9920 阅读 · 0 评论 -
[转]GDI 泄漏检测方法
GDI 泄漏检测方法方法一方法二方法三转载至https://www.cnblogs.com/doudongchun/p/3699695.html方法一1、打开电脑的【任务管理器】,选择【进程】页,点击菜单项的【查看】项,选择【选择列】;2、勾选【GDI对象(J)】即可。3、此时,用户就可以在进程中看到每个进程对应的GDI对象,每个进程的GDI对象(网页浏览器除外,每打开一个网页GDI...转载 2018-10-15 11:17:16 · 8196 阅读 · 0 评论 -
MFC实现来回滚动效果的进度条
MFC实现来回滚动效果的进度条问题起因效果图解决方案代码问题起因进度条的使用是因为大量的计算非常耗时间,而又不可能让用户在那里傻等,因为就出现了进度条,告诉用户当前过程已经进行到了哪一步,这样就可以给用户一个很直观的表现。但是,不是所有的耗时间的计算过程都是可以量化的,比如一个计算工作总量不知道,我们就算知道每一次它进行了多少,也是没办法实时绘制滚动条的,特别明显的一个应用场景在excel插件...原创 2018-09-21 11:06:12 · 9952 阅读 · 4 评论 -
MFC中edit控件中实现文字垂直居中
windows api中有提供FlashWindowEx来实现窗口任务栏的闪烁效果,该函数原型为:BOOL FlashWindowEx(PFLASHWINFO pfwi);PFLASHWINFO 是一个结构体,结构体定义如下:typedef struct FLASHWINFO { UINT cbSize; HWND hwnd; DWORD dwFlags; UINT...原创 2018-09-19 21:23:59 · 14594 阅读 · 3 评论