关于Windows页面错误的一些基础概念
很少被开发者关注的页面错误
今天我们会说说关于虚拟内存处理中最为常见的一个问题:页面错误(Page Fault)。
什么情况下会发生一个页面错误呢?
当应用程序请求的页面地址不在当前的内存驻留页面(Memory resident pages)时,就会发生页面错误。
当发生页面错误的时候,会发生什么?
发生页面错误的线程会被操作系统设置为挂起状态,而此时操作系统会尝试在磁盘上找到对应的页面并将此页面...
搞清楚系列:什么是一个子(child)窗口
“还”有这么一个简单的问题
搞了这么久的Windows开发,我依然会频繁地对另一个问题比较茫然:什么是一个子(child)窗口?
那,今天就再来叨叨一下。
一个子窗口是一个设置了WM_CHILD的窗口,并且它又如下属性:
> 它有一个父窗口
> 它始终显示在父窗口的客户区(不能显示到父窗口外面)
> 如果父窗口被移动了,子窗口也会跟着移动(子窗口相对于父窗...
搞清楚系列:什么是一个顶级(top-level)窗口
有这么一个简单的问题
搞了这么久的Windows开发,我依然会频繁地对这个问题比较茫然:什么是一个顶级(top-level)窗口?
那,今天就来叨叨一下。
一个top-level窗口是一个不是子窗口的窗口(绕口令来了)。说白了,就是说,这个窗口不带有WM_CHILD属性。
更多解析
> top-level窗口和子窗口不同,一个top-level窗口可以被显示在屏幕的任何位置,而子窗口一般只能...
BSTR到底该怎么用?
搞明白BSTR和WCHAR *的区别是很重要的一件事
如果你曾经使用C/C++开发过涉及COM组件的应用,则下面的代码你应该不会陌生:
STDMETHODIMP CFo:Bar(BSTR bstrABC) { // …
这个BSTR是个什么神仙玩意儿?它和WCHAR *之间有什么区别吗?
像C/C++这种低层语言给予了开发者十分大的自由度,开发者可以自己决定一串二进制位采用何种模式来抽...
C++ final指示符带来的性能提升
final指示符简介
C++中的final指示符可以将一个类或者虚函数标记为不可继承或重写。让我们先看看如下的代码:
如果我们尝试创建一个新类并继承自[derived],则我们会得到一个编译错误,如下图所示:
final指示符向类的客户明确传递了这样的信息:这个类不应该用来被继承,并且使用编译器来保证这一点。同时,使用这个标识符可以使用去虚拟化(Devirtualization)来优化代码的性...
是时候考虑为你的团队定制AI化的IntelliSense了
让IntelliCode更加智能化
在你敲代码的时候,你正在舒服的享受着自动完成列表所带来的编码快感,这一切都依赖着IntelliCode组件在幕后所做的辛勤工作。在之前的一篇关于IntelliCode文章中,我们解释了IntelliCode是如何通过对几千个GitHub开源项目里的代码进行机器学习,然后作出更加智能化的编码建议。
对于一些类似于标准库的公共API,基于社区知识库的检索分析方式是十...
DNE LightWeight Filter导致的虚拟机ping不通的问题
今天被一个问题折腾了一整天了,怒写一篇文章以示纪念。
问题
虚拟机采用桥接方式接入到网络,并通过DHCP服务器获取动态IP。
宿主通过有线方式接入网络并通过DHCP获取到动态IP。
虚拟机中无法ping通宿主机,同时宿主机也ping不通虚拟机。
尝试过的方法
1) 修改虚拟机桥接方式,不适用自动绑定网卡,而是绑定到一个具体的宿主机网卡,无效。
2) 修改虚拟机中的网卡工作方式,从1Gbps修改为1...
新玩意儿更新:C++编码规则及最佳实践
朋友,你是否也和我一样:咋样都行,就是无法容忍构建结束时出现的编译警告。
对于稍微有点完美主义的我来说,我希望能尽自己最大的能力,消除一切的编译警告。但有时候,我也会感到沮丧:有些警告是无法清除的,至少在目前的开发环境里是没有这种可能性的。
此话怎讲?
比如,我曾经碰到一个关于menifest的格式兼容性报警,要解决此问题,需要升级我电脑里的某一个DLL,但是这个升级需要联系Microsoft售后...
实战经验:在Windows平台编译x264
最近想研究一下大名鼎鼎的x264库,由于本人功力实在薄弱,单单是为了能在Windows平台编译这玩意,也花了不少功夫。在摸爬滚打的过程中,也碰到了一些坑,这里记录下来,希望能帮助有需要的朋友。
一. MSYS2配置
1) 首先去MSYS2官网安装包,因为我的电脑是64位系统,所以,这里我选择x86_64版本。MSYS2可以根据需要安装32位和64位版本的mingw和编译工具链,而且还有个十分好用的...
实战经验:WM_COPYDATA在不同权限进程中的接收问题
问题
在一次开发中,需要使用到WM_COPYDATA方式来实现两个进程之间的数据传输。在网络上可以找到很多关于WM_COPYDATA的示例代码,而且代码结构也比较简单易懂,所以WM_COPYDATA的示例代码不是今天要详细讨论的内容。
今天的问题存在于两个不同权限的进程,例如发送端进程运行在普通用户账户下,而接收端进程则运行在管理员账户下。在这种情况下,发送端发送的WM_COPYDATA消息,将不...