摘要:作者:zyl910。 这是一个小工具,枚举ActiveX控件的 CLSID 和 implemented/required CATIDs。可用来帮助分析ActiveX控件部署问题。一、代码 全部代码——View Code #include <stddef.h>#include <stdio.h>#include <tchar.h>#include <locale.h> #include <Windows.h>#include <crtdbg.h>#include <comcat.h>#include <at
阅读全文
随笔分类 - D30 Windows
摘要:新版本——http://www.cnblogs.com/zyl910/archive/2012/10/01/zintrin_v101.html作者:zyl910。 现在很多编译器支持intrinsic函数,这给编写SSE等SIMD代码带来了方便。但是各个编译器略有差异,于是我编写了zintrin.h,智能引入intrinsic函数。一、各种编译器的区别1.1 Visual C++(Windows) 最早支持intrinsic函数的VC编译器是VC 6.0。它在装上Visual Studio 6.0 Service Pack 5、Visual C++ 6.0 Processor Pack这两..
阅读全文
摘要:作者:zyl910。 这几天在调试一个使用Http POST协议的接口。在网上找了几个Http测试工具,但感觉不太好用。于是自己用C#写了一个简单的测试工具。一、使用介绍 默认是“POST”模式。在最上面的文本框中输入Url地址,然后在“Post Data”文本框中输入Post参数,再点击“Go”按钮发送请求。 如果想使用“GET”模式。便点击左上角的组合框,选择“GET”模式,再点击“Go”按钮发送请求。 当发现回应内容乱码时。点击“Response Encoding”组合框,选择合适的编码。再点击“Go”按钮重新发送请求。二、全部代码 窗口的代码(FrmTestHttpPost....
阅读全文
摘要:作者:zyl910。 之前的ccpuid V1.00版(http://www.cnblogs.com/zyl910/archive/2012/07/11/ccpuid.html)只支持VC。 现在的V1.01版支持GCC,不仅兼容32位/64位Linux下的GCC,还兼容Windows下的MinGW、MinGW-w64、TDM-GCC等。可以自由的编译为Windows下、或Linux下的程序。一、更新说明 主要的改进有——1. 支持GCC。2. 使用getcpuid/getcpuidex函数来获取CPUID信息。3. 使用C99标准整数类型uint32_t,提高可移植性。二、全部代码2....
阅读全文
摘要:作者:zyl910 为了适应现在越来越流行的64位系统,经常需要将代码分别编译为32位版和64位版。其次,除了需要生成debug版用于开发测试外,还需要生成release版用于发布。本文介绍了如何利用makefile条件编译来生成这些版本,而且不仅兼容Linux下的GCC,还支持MinGW、TDM-GCC等Windows下的GCC编译器。一、C程序代码 为了测试条件编译的效果,以下面这个C语言程序为例(gcc64_make.c)——#include <stdio.h>#include <assert.h>// 获取程序位数(被编译为多少位的代码)int GetProgr
阅读全文
摘要:新版本——http://www.cnblogs.com/zyl910/archive/2013/01/10/c99int_v101.html[C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)作者:zyl910 C99标准定义了stdint.h、inttypes.h,用于统一的跨平台数据定义。可惜VC、BCB等编译器对C99的兼容性较差,有些版本没有该头文件。本文对此进行探讨,编写了一套兼容VC、BCB、GCC的stdint.h、inttypes.h。一、心得.
阅读全文
摘要:作者:zyl910 在编写跨平台的程序时,我们经常使用预定义宏来检测编译环境。虽然编译器的手册中有预处理宏的介绍,但是不够详细,而且还有很多宏没有介绍。于是,我编写了一个小程序,显示常见C/C++编译器的编译器的预定义宏。一、心得 最直接的办法是逐个逐个的用#ifdef判断宏是否存在,然后再printf显示其内容。可是预定义宏有些是整数、有些是字符串,还有些是关键字不能直接用printf输出,用起来挺麻烦的。 在网上发现一种不错办法,出自《关于CPP的预定义宏:unix、linux、i386、i586,大家中过招吗?》4楼“太平绅士”——View Code #include <stdio
阅读全文
摘要:作者:zyl910 随着wchar_t类型引入C语言,字符串处理变得越来越复杂。例如字符串输出有printf、wprintf这两个函数,当参数中既有char字符串又有wchar_t字符串时,该怎么填写格式控制字符呢?本文对此进行探讨。一、翻阅文档 先翻阅一下各个编译器的文档及C99标准,看看它们对格式控制字符的说明。1.1 VC的文档 在MSDN官网上,可以找到printf与wprintf的格式字符串的说明,在《Format Specification Fields: printf and wprintf Functions》(http://msdn.microsoft.com/en-u...
阅读全文
摘要:从2011年的Sandy Bridge微架构处理器开始,现在支持AVX系列指令集的处理器越来越多了。本文探讨如何用VC编写检测AVX系列指令集的程序,并利用了先前的CPUIDFIELD方案。一、AVX系列指令集简介 SSE5 指令:SSE5 是一个纸面上的指令集,并没有最终实现,AMD 在 2007 年 8 月公布 SSE5 指令集规范,在 2009 年 5 月 AMD 推出了 XOP,FMA4 以及 CVT16 来取代 SSE5 指令。 AVX 指令:2008 年 3 月 Intel 发布了 AVX(Advanced Vector Extensions)指令集规范,首次在 Sandy B..
阅读全文
摘要:除了基本的MMX和SSE系列指令集外,x86体系还有其他扩展指令集,例如SSE4A、AES、PCLMULQDQ等,它们也可以利用CPUID指令来检测。但是,这些指令集细碎杂多。如果像以前那样分别编写检测函数的话,那工作量太大,不值得。而且大量的函数名也会给使用带来麻烦。于是文篇探讨如何设计一套通用的检测方案。零、指令简介 SSE4A指令:是AMD提出的,最早出现在2007年的K10微架构的处理器上。它针对Intel的SSE4指令集修改而来,去除其中对I64优化的指令,保留图形、影音编码、3D运算、游戏等多媒体指令,并完全兼容。 AES指令:是Intel提出的,最早出现在2010年的West..
阅读全文
摘要:现在多核处理器已经很普及了,市场主流是双核处理器,还有4核、8核等高端产品。而且Intel推广了超线程技术(Hyper-Threading Technology, HTT),可以将一个物理核心模拟为两个逻辑处理器。这一切使得“CPU数量”这一概念变得复杂起来,对于软件开发人员来说,希望能获得物理CPU数、CPU核心数、逻辑CPU数等详细信息。 在Windows平台,可以调用GetLogicalProcessorInformation函数来获取它们的详细信息。一、背景知识 先来明确一下名词——physical processor packages:物理处理器封装个数,即俗称的“物理CPU...
阅读全文
摘要:如今64位系统越来越流行了,对于软件开发人员来说,掌握64位开发技术将会有更好的发展空间。而且经过这几年的发展,64位开发工具也成熟了,例如Visual Studio 2010。 关于如何配置64位平台,MSDN上有详细的介绍——http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx如何:针对 64 位平台配置 Visual C++ 项目 在很多时候,我们希望能兼容老系统,于是配置了两个编译平台——Win32 和 x64。 但光这样做还是不够的,因为老系统不支持某些新功能。所以我们需要在运行时动态动态判断。 最常见的判断有两种——...
阅读全文
摘要:1.zSaveGIF下载:http://files.cnblogs.com/zyl910/zSaveGIF.zip快速的GIF编码/解码程序。其中的GIF_LZW编码/解码算法是我最自豪的。2.NetPicTran下载(注意修改下载后的扩展名) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (利用GIF_LZW算法实现的)网络图片传输 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~作者:zyl910版本:1.0更新:2004-06-06技术特点~~~~~~~~一、使用TCP协议传输数...
阅读全文