VC++

五月 19, 2014

三种截取屏幕的方式

Various methods for capturing the screen By Gopalakrishna Palem, 19 Sep 2006 Download GDI source code – 72.1 Kb Download DirectX source code[...]
Read More »

五月 9, 2014

How can I return a string from a C dll to C#?

// c code: #include <ole2.h> /* needed for CoTaskMemAlloc */ EXPORT char* getUrlFromBaseURLInList(char *ListFilePath, char *SrchBaseURL, char*[...]
Read More »

六月 14, 2012

【转】Windows上调用Cygwin编译的函数库

2012-04-05 19:22 转载自 kaien_space 本篇介绍的是静态库函数。静态库扩展名是.lib(windows上)或.a(linux上),他和动态库(dll)是有区别的。 调用静态库编译后会写入执行程序中。然后就可以独立运行了。 动态库旨在动态调用,调用的时候需要加载dll才能正常工作。 (所以动态库往往可以提供补丁,或功能升级的时候使用,但是运行的速度有待商协) 另外,两个库的编译器也不一样,例如mingw用g++.exe生成动态库.dll,[...]
Read More »

十一月 24, 2011

用VC++实现USB接口读写数据的程序

使用一个GUIDguidHID_1查找并打开一个USB设备 [code lang=”c”] extern "C" int PASCAL SearchUSBDevice() { HANDLE hUsb; int[...]
Read More »

十月 19, 2011

关于#pragma pack与sizeof()

本文来自:http://www.cnblogs.com/whu-gy/archive/2008/05/04/1182365.html 这是讲的最清楚明了的了,必须要收藏 :) —khler 对于结构体,在使用sizeof的时候会进行字节的对齐,对齐的规则如下: 1)[...]
Read More »

十月 14, 2011

串口通讯简单回顾

最近几个小项目都是与串口有关的,前段时间用C++实现了一个串口通讯类,高效稳定,效果还不错;后来由于一个同事用C#的SerialPort类与设备通讯时效率很低,让我帮他自己包装了一个C#的Comm通讯类。 串口通讯中对串口的设置基本上很简单,大部分时候只需要设置串口号和波特率、数据位、停止位,其他的很少改动,默认就行了。 在使用C#与设备通讯时,发现一个比较贵的USB转串口线通讯速度不稳定,至少前面几分钟速度会非常的慢,之后就恢复正常了。但是用sscom32调试助手看却很快,所以怀疑打开串口的时候是不是对其他几个参数的设置上的区别导致通讯速度的不同?更奇怪的是另一根相当便宜的USB转串口线,在任何情况下速度都很正常,汗…… 简单讲解 串口是计算机上一种非常通用的通信设备,大多数计算机包含两个基于RS232的串口,由于其使用简单造价低廉而被普遍应用。 奇怪的是近几年出产的笔记本和PC机基本都没有串口这种设备了,而简单易用、成本低廉的特性,让很多硬件设计工程师还是选择了串口作为设备与其他设备的通讯方式。因此,usb串口转换线使用的非常多,它的RS232-485接口连接串口设备,另一端转换为USB接入PC等上位机,在上位机上模拟出多个串口,以实现PC机通过串口与外围串口设备通讯。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。而IEEE488定义规定,对于并行通讯,设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。 串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。 高深一点,通讯过程中的硬件知识 由于[...]
Read More »

九月 29, 2011

MFC中位图按钮的实现

用了4天搞定一个智能工厂的短信猫控制数据采集设备的程序,重用一回MFC,感觉还是相当爽的,有种老朋友重逢的感觉:) 由于短信猫自带的SDK写的垃圾了点,所以我直接使用AT指令搞定了; 界面基本就是一些位图,通过贴图模拟现场设备的样子; 界面背景、Label,Edit的背景修改都还好说,就是按钮有些特殊,所以需要特殊处理一下,我用的当然也是现成CBitmapButton按钮类——它其实就是简单的从CButton继承了一下,把一些绘制工作子类化了,使用注意事项和其他知识,网上找找,有很多资料,一下是网上找的一些使用资料: 方法一: 1、在资源编辑时,要设置按钮的Owner[...]
Read More »

三月 10, 2011

MFC中跨线程UpdateData(FALSE)报错 ASSERT FAILD问题

MFC程序,在给控件关联的变量赋值后,需要调用UpdateData(FALSE)后才能更新到界面,但是有时候却报错: 断言宏失败,在wincore.cpp的如下位置:   CObject*[...]
Read More »

二月 25, 2011

VC MFC程序,在About对话框中获取并显示程序的版本号

  ================================================= 本文为HeYuanHui原作 转载必须确保本文完整并完整保留原作者信息及本文原始链接! NN:     [...]
Read More »

一月 2, 2011

如何学好3D游戏引擎编程

此文为转载,值得一看 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 [...]
Read More »

七月 22, 2010

STL MAP LIST 遍历

  for(iterator it = begin(); it != end(); ++it) for(iterator it = begin(); it != end(); it++) 两种方式iterator遍历的次数是相同的,但在STL中效率不同,前++–返回引用,后++–返回一个临时对象,因为iterator是类模板,使用it++这种形式要返回一个无用的临时对象,而it++是函数重载,所以编译器无法对其进行优化,所以每遍历一个元素,你就创建并销毁了一个无用的临时对象。 不信的话你可以去看看C++的标准库,还有符合标准C++的教材,除了特殊需要和对内置类型外,基本都是使用++it来进行元素遍历的,不管是源代码还是教材中都是如此。 用户定义类型对操作符的重载应与内置操作符的行为相似,而且后自增/减往往是引用前自增/减来作为其实行的一个副本。 比如通常都是这种形式: class[...]
Read More »

七月 22, 2010

C中的预编译宏定义

                                                         [...]
Read More »

七月 16, 2010

VC++的Unicode编程

  一、什么是Unicode google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);   先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符并没有那么多,一般只用前128个(00H—7FH,最高位为0),其中包括了控制字符、数字、大小写字母和其它一些符号。而最高位为1的另128个字符(80H—FFH)被称为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其它符号。  这种字符编码规则显然用来处理英文没有什么问题。但是面对中文、阿拉伯文等复杂的文字,255个字符显然不够用。于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312—80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII字符来表示,以区分ASCII码部分。  但是这个方法有问题,最大的问题就是中文的文字编码和扩展ASCII码有重叠。而很多软件利用扩展ASCII码的英文制表符来画表格,这样的软件用到中文系统中,这些表格就会被误认作中文字符,出现乱码。  另外,由于各国和各地区都有自己的文字编码规则,它们互相冲突,这给各国和各地区交换信息带来了很大的麻烦。要真正解决这个问题,不能从扩展ASCII的角度入手,而必须有一个全新的编码系统,这个系统要可以将中文、法文、德文……等等所有的文字统一起来考虑,为每一个文字都分配一个单独的编码。 于是,Unicode诞生了。   Unicode也是一种字符编码方法,它占用两个字节(0000H—FFFFH),容纳65536个字符,这完全可以容纳全世界所有语言文字的编码。在Unicode里,所有的字符被一视同仁,汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,也就是说,所有的文字都按一个字符来处理,它们都有一个唯一的Unicode码。 二、使用Unicode编码的好处   使用Unicode编码可以使您的工程同时支持多种语言,使您的工程国际化。  另外,Windows[...]
Read More »

四月 16, 2010

【转】浅谈C/C++内存泄漏及其检测工具

浅谈C/C++内存泄漏及其检测工具 2006-04-03 09:00 作者: 出处:温馨小屋   对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart[...]
Read More »

三月 22, 2010

用 Directx 和 GDI 的 两种方法的截屏代码

http://www.cnblogs.com/piccolo/articles/241933.html   LPDIRECTDRAW lpDD     = NULL;LPDIRECTDRAWSURFACE lpDDSPrime  =[...]
Read More »

三月 22, 2010

GetPixel截屏

作     者:周强 2009.05.02   /*************************************************************************** 函数名称:SaveToBmpFile*[...]
Read More »

三月 22, 2010

DirectDraw下的的游戏截屏

  现在很多游戏都提供一种截屏的功能,用来截取游戏中的画面,那么这是如何实现的呢?其实就是把游戏当前屏幕的数据存成一个图片文件;在这里我给出一段源程序,它实现了DirectDraw(16位模式)下的的游戏截屏。生成的文件格式为BMP,程序有比较详细的注释,请各位自己看吧。 bool[...]
Read More »

三月 22, 2010

使用DirectX截屏

网上有很多关于DirectX截屏的文章,但大都是屏幕截图,很少有窗口截图,本文则两者都涉及到,先讲如何截取整个屏幕,再讲如何截取某个窗口,其实二者的区别不大,只是某个参数的设置不同而已,最后我们还将扩展到任意区域的截图。 首先看一下截屏用到的函数,最核心的当然是D3DXSaveSurfaceToFile,先看下函数原型[...]
Read More »

三月 22, 2010

基于MFC的截屏

#include “stdafx.h”#include <afxwin.h> void Screen(char filename[]){    CDC *pDC;//屏幕DC    pDC = CDC::FromHandle(GetDC(NULL));//获取当前整个屏幕DC    int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式    int Width = pDC->GetDeviceCaps(HORZRES);    int Height = pDC->GetDeviceCaps(VERTRES);     printf(“当前屏幕色彩模式为%d位色彩\n”, BitPerPixel);    printf(“屏幕宽度:%d\n”, Width);    printf(“屏幕高度:%d\n”, Height);        CDC memDC;//内存DC    memDC.CreateCompatibleDC(pDC);        CBitmap memBitmap, *oldmemBitmap;//建立和屏幕兼容的bitmap    memBitmap.CreateCompatibleBitmap(pDC, Width, Height);     oldmemBitmap = memDC.SelectObject(&memBitmap);//将memBitmap选入内存DC    memDC.BitBlt(0, 0, Width, Height, pDC, 0, 0, SRCCOPY);//复制屏幕图像到内存DC     //以下代码保存memDC中的位图到文件    BITMAP bmp;    memBitmap.GetBitmap(&bmp);//获得位图信息        FILE *fp = fopen(filename, “w+b”);     BITMAPINFOHEADER bih = {0};//位图信息头    bih.biBitCount = bmp.bmBitsPixel;//每个像素字节大小    bih.biCompression = BI_RGB;    bih.biHeight = bmp.bmHeight;//高度    bih.biPlanes = 1;    bih.biSize = sizeof(BITMAPINFOHEADER);    bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//图像数据大小    bih.biWidth = bmp.bmWidth;//宽度        BITMAPFILEHEADER bfh = {0};//位图文件头    bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量    bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//文件总的大小    bfh.bfType = (WORD)0x4d42;        fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头        fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头        byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据     GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p,         (LPBITMAPINFO) &bih, DIB_RGB_COLORS);//获取位图数据     fwrite(p, 1, bmp.bmWidthBytes * bmp.bmHeight, fp);//写入位图数据     delete [] p;     fclose(fp);     memDC.SelectObject(oldmemBitmap);}     [...]
Read More »

七月 2, 2008

VSS 2005 使用详解

节 1.01 前言 2 节 1.02 安装 2 节 1.03 数据库管理 3 (a) 介绍 3 (b) Visual SourceSafe 6.0 Admin程序 3 (c) 打开指定的数据库 4[...]
Read More »

Proudly powered by WordPress and Sweet Tech Theme