
windows programming
文章平均质量分 68
zp373860147
互联网 Python C/C++ 底层机制
展开
-
关于UNICODE中使用CString::GetLength()的注意
在ASCII中使用CString::GetLength()的话,貌似没得问题,但是在Unicode中使用CString::GetLength()时,返回的是字符数而不是字节数....但是我们知道在Unicode中字节数=字符数*2。所以可以在程序中层架如下代码来增强通用性:原创 2011-03-29 10:59:00 · 3408 阅读 · 0 评论 -
Disable Language Extensions
今天自己编译jsoncpp的代码,只提取了jsoncpp-src-0.5.0版本中makefile下的vs7.1解决方案中的lib_json工程,然后在该工程中添加了一个自己的头文件json.h和源文件json.cpp,用于包装jsoncpp。然后引用了一个字符串处理的头文件,这个头文件里引用了和,结果编译后出现下面的错误:google了半天,才摸索出解决方案,把Property-->原创 2012-04-28 20:10:48 · 934 阅读 · 0 评论 -
应用程序无法正确启动,0x00000b
release程序拿给没有安装vc环境的机器运行,出现“应用程序无法正确启动,0x00000b”的问题,经过判断不是没有安装vc环境的原因。exe程序依赖了A.dll,A.dll在编译时依赖了b.dll和c.dll,后来用Depends查看dll的依赖,发现release版的A.dll中依赖了msvcr80.dll和msvcr80d.dll,release版依赖msvc80.dll是不正常的。原创 2012-05-05 15:20:46 · 2636 阅读 · 0 评论 -
“当前目录”以及DLL搜索路径的问题
GetCurrentDirectory这个API用于获得进程的“当前目录”GetModuleFileName获取一个已装载模板的完整路径名称区别通过一个实验可以明显的看出void CCurrentDirDlg::OnBnClickedButton1(){ // TODO: Add your control notification handler code here原创 2012-05-05 18:03:03 · 1973 阅读 · 0 评论 -
虚拟内存,映射,分页机制
这是我找到的关于虚拟内存和分页机制的我个人比较容易理解的一篇文章。虚拟存储器的思想是程序、数据和堆栈的大小都有可能超过物理内存大小,由操作系统把当前使用的放在内存,而不需要的放在磁盘。 而绝大部分操作系统使用的虚拟存储器技术就是分页技术。 在虚拟存储器中,程序所产生的地址为虚拟地址,虚拟地址构成了虚拟地址空间。(当然了在没有虚拟存储器的系统上,程序产转载 2012-07-31 19:56:19 · 5032 阅读 · 0 评论 -
PE文件与虚拟内存间的映射
(1)静态反汇编工具看到的PE文件中某条指令的位置是相当于磁盘文件而言的,即所谓的文件偏移,我们可能还需要知道这条指令在内存中所处的位置,即虚拟内存地址(VA)。(2)反之,在调试时看到的某条指令的地址是虚拟内存地址,我们也经常需要回到PE文件中找到这条指令对应的机器码。为此,我们需要弄清楚PE文件地址和虚拟内存地址之间的映射关系。首先,我们先看几个重要的概念。文件偏移地址(File转载 2012-07-31 20:40:38 · 3549 阅读 · 0 评论 -
理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列
原文章连接:http://www.cnblogs.com/ILove/archive/2008/04/07/1140419.html我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在转载 2012-11-14 15:36:34 · 7223 阅读 · 2 评论 -
多线程数据同步总结
在线程安全的单间类中提到了InterlockedCompareExchangePointer函数及CAS(Compare and swap)技术,或者成为Lock Free,及使用系统提供的基于cpu指令的无锁多线程数据同步技术。这里打算稍微学习并总结下windows平台下常用的多线程数据同步方法以及他们的区别。多线程同步,最常用的应该是加锁。常见的方式有临界区、信号量、互斥锁等。临界原创 2012-11-14 14:46:07 · 984 阅读 · 0 评论 -
boost中的mutex与lock
最近在多线程编程中多次使用到mutex来互斥,看了下项目的代码,有自己封装的mutex类,也有直接使用boost::mutex的,而boost中关于mutex可谓令人眼花撩换。这里总结一下。对于mutex和lock,要明确一点,真正起到互斥作用的mutex,而lock可以认为是协助mutex令我们在使用时更方便。搞不清楚二者关系的可以参考这里:从高中一次半夜不冲厕所的经历谈程序原创 2012-11-15 15:41:09 · 10105 阅读 · 0 评论 -
多线程数据同步总结(二)
性能问题凡是涉及到多线程数据同步都会有额外的性能开销。常见的同步方式按照性能开销从小到大(主要是耗时的多少)排序为:volatile读取、volatile写入、Interlocked API、SRWLock、关键段(带旋转锁)、内核对象。使用内核对象,比如互斥量、信号量等的开销最大,因为这时以切换到内核态,而从用户态切换到内核态,大概需要1000个CPU指令周期。关键段原创 2012-11-19 14:56:18 · 947 阅读 · 0 评论 -
Chrome源码剖析 【五】
转自http://www.cnblogs.com/duguguiyu/archive/2008/11/05/1326777.html【五】 Chrome的插件模型1. NPAPI为了紧密的与各个开源浏览器团结起来,共同抗击IE的垄断,Chrome的插件,也遵循了NPAPI(Netscape Plugin Application Programming Inter转载 2013-03-12 14:41:45 · 772 阅读 · 0 评论 -
Chrome源码剖析【二】
转自http://www.cnblogs.com/duguguiyu/archive/2008/10/04/1303695.html【二】Chrome的进程间通信1. Chrome进程通信的基本模式进程间通信,叫做IPC(Inter-Process Communication),在Chrome不多的文档中,有一篇就是介绍这个的,在这里。Chrome最主要转载 2013-03-11 17:51:14 · 729 阅读 · 0 评论 -
Chrome源码剖析 【四】
转自http://www.cnblogs.com/duguguiyu/archive/2008/10/24/1318363.html【四】Chrome的UI绘制1. Chrome的窗口控件Chrome提供了自己的一个UI控件库,相关文档可以参见这里。用Chrome自己的话来说,我觉得市面上的七荤八素的图形控件库都不好用,于是自己倒腾倒腾实现了一套。。。广转载 2013-03-12 12:14:31 · 821 阅读 · 0 评论 -
Chrome源码剖析 【序】 && 【一】
转自http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html【序】 开源是口好东西,它让这个充斥着大量工业垃圾代码和教材玩具代码的行业,多了一些艺术气息和美的潜质。它使得每个人,无论你来自米国纽约还是中国铁岭,都有机会站在巨人的肩膀上,如果不能,至少也可以抱一把大腿。。。现在我就是来抱大腿的,这转载 2013-03-11 17:30:20 · 956 阅读 · 0 评论 -
Chrome源码剖析【三】
转自http://www.cnblogs.com/duguguiyu/archive/2008/10/12/1308876.html【三】 Chrome的进程模型1. 基本的进程结构Chrome是一个多进程的架构,不过所有的进程都会由老大,Browser进程来管理,走的是集中化管理的路子。在Browser进程中,有xxxProcessHost,每一个host,都转载 2013-03-12 12:13:11 · 776 阅读 · 0 评论 -
windows平台下编译curl支持https
参看http://curl.haxx.se/download.html,curl有多个版本,会有是否包含ssl之分。如果需要使之支持https,就需要使用带ssl的版本。在Windows的平台下会有多个选择,想省事的话就直接下载win32-msvc带ssl版的,加压后里面会有一些curl依赖的dll,比如libeay32.dll ssleay32.dll openldap.dll等,这就是需要原创 2012-04-27 18:54:09 · 14687 阅读 · 0 评论 -
一个死锁的问题
问题是这样的,如下图所示:1.有一个线程模型,其中,MainThread为主线程,他有一些资源,比如两个互斥器mutex1,mutex2,下面统称为锁。2.这个主线程可以创建很多子线程thread1、thread2......threadn,主线程还有很多回调函数callback1、callback2......callbackn,这些回调函数在创建子线程时被挂到子线程上。3.这些子线原创 2012-04-25 17:46:46 · 1070 阅读 · 0 评论 -
使用__FILE__得到当前源文件的文件名&使用__LINE__得到当前所在行数
想用C++自己实现一个轻量级的日志文件类,记录运行时的错误信息、时间信息、错误发生的源代码文件名、错误发生所在行数。实现后两个功能时遇到了些困难,后来在msdn上查到标准C++提供了一组宏,可以完美的解决这些问题。下面摘自MSDN: -----------------原创 2011-03-29 17:32:00 · 938 阅读 · 0 评论 -
【转】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息
在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量。有时在查看窗口显示的内容不是很直观。为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧。下面是几个例子。1.Windows消息在开发调试界面程序时,我们经常需要转载 2011-04-20 20:57:00 · 536 阅读 · 0 评论 -
.Net下的Socket编程(c#)(一)
介绍这篇文章将会介绍在.net框架下基本的socket编程。主要是使用c#,通过一个实例(服务器和客户端),借助TCP/IP协议和UDP协议来讲解。 1.网络基础在网络通信中,多是通过连接多个主机来实现,而这其中,TCP/IP协议是最常见也最被认可的协议。在TCP原创 2011-09-16 11:44:34 · 849 阅读 · 0 评论 -
.Net下的Socket编程(c#)(二)
上一节介绍了使用TCP/IP,本届介绍UDP 3.使用UDP进行多点广播UDP不像TCP,UDP是无连接的,数据可以通过一个单独的socket被发送给多个接收者。基于UDP的操作如下:(1)使用本地端口号或者远程主机号远程端口号创建一个System.Net.Soc原创 2011-09-16 13:50:53 · 815 阅读 · 0 评论 -
spserver
为了搭一个spserver服务器,花了半天的时间,终于搞好了.....其实也怪我自己,因为粗心大意没看清楚编译spserver源代码工程的先后顺序,一直搞不定,果断google百度了半下午+一晚上,不过收获还是很大的。现在把我这半天中碰到的有关spserver的问题及学到的东原创 2011-09-16 21:29:11 · 7604 阅读 · 5 评论 -
DLL函数中内存分配及释放的问题
DLL函数中内存分配及释放的问题最近一直在写DLL,遇到了一些比较难缠的问题,不过目前基本都解决了。主要是一些内存分配引起问题,既有大家经常遇到的现象也有特殊的情况,这里总结一下,做为资料。错误现象是“其原因可能是堆被损坏,这也说明 **.exe 中或它所加载的任何转载 2011-09-27 18:35:17 · 8640 阅读 · 1 评论 -
vc中常见字符类型的讨论
一、将要讨论的问题charwchar_t TCHAR _TCHAR _T _TEXT __TLPSTR LPCSTR LPCTSTR LPWSTR CString 二、一切的基础首先,char就不说了,单个字节表示,ansi的方式wchar_t是Unicode字符的数据类型,宽字符,用两个字节表示,它实际定义在里:原创 2011-11-14 15:40:07 · 2529 阅读 · 0 评论 -
CString结构 CopyBeforeWrite技术 内存拷贝越界
最近在网上看了一篇文章,是有关CString 结构的,我把它转载过来希望大家看了对你有帮助理解CStringCString? 如果你接触过vc/mfc,呵呵,这个名字你一定见过。那么你就大胆的看下面的一个例子吧----------------------------------一段简单的代码如下:----------------------------------void C.转载 2011-11-14 15:08:07 · 2517 阅读 · 0 评论 -
Resource View Of vs2010
Q:There will be a message box tips that when open the Resource View---"X:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\rcdll.dll;X:\Program Files\Microsoft Visual Studio 10.0\VC\bin\rcdll.dllC原创 2011-11-23 16:36:02 · 2042 阅读 · 0 评论 -
定位程序Crash常用工具和方法
一、引言 任何程序正确则只有一种结果,但是错误却有千万种,而众多的错误有些是可容忍,有些则是致命的,如除零错误、堆栈溢出、内存越界等导致程序Crash。由于很多错误并不是发生在开发工作者调试阶段,而是在用户或测试工作者使用阶段;这就需要相关代码维护工作者对于程序异常捕获收集现场信息。 当收集相关信息后,如何定位这些错误是的极为讲究的过程,工具和方法使用得当则可事半功倍,反之事倍转载 2012-03-19 15:42:04 · 1685 阅读 · 0 评论 -
PDB文件:每个开发人员都必须知道的
PDB文件:每个开发人员都必须知道的 一 什么是PDB文件大部分的开发人员应该都知道PDB文件是用来帮助软件的调试的。但是他究竟是如何工作的呢,我们可能并不熟悉。本文描述了PDB文件的存储和内容。同时还描 述了debugger如何找到binay相应的PDB文件,以及debugger如何找到与binay对应的源代码文件。本文适用于所有的Native和 Managed的开发人员。转载 2012-03-19 16:05:51 · 892 阅读 · 0 评论 -
程序Crash调试方式--MAP文件
什么时候用MAP文件调试1.调试程序时,我们发现Debug版的exe可以完全正常运行,而Release版却经常莫名其妙Crash。2.程序运行时直接崩溃,只显示一个出错地址,让联系开发人员。这样根本找不到程序Crash的位置。3.但在大量进行压力测试时,尤其是多线程测试时,有可能同时出现十几个错误,这时VC本身的调试跳转可能跟不到核心出错的现场。什么是MAP文件MAP文原创 2012-03-19 17:43:39 · 3456 阅读 · 0 评论 -
使用hook 拦截消息
钩子(Hook),是Windows消息处理机制的一个平台,用用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的(我始终认为用hook去钩当前自己的进程没多大意义,去钩别的进程才比较实在)。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。原创 2012-03-23 11:07:13 · 9916 阅读 · 0 评论 -
Dynamic Data Exchange(DDE)机制引发的卡死
有一个bug:在XP系统下,某些机器上ShellExecute在打开文件时会造成程序卡死,看了Dump文件,堆栈如下:说明ShellExecute内部使用了DDE,即Dynamic Data Exchange,动态数据交换技术。DDE用于进程间通讯,需要两个Windows应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。客户机应用程序向当前所激活的服务器应用原创 2013-03-21 11:38:52 · 2400 阅读 · 0 评论