c++
文章平均质量分 69
csdn程序猿
这个作者很懒,什么都没留下…
展开
-
Windows API 串口编程
最近一直在研究串口的编程,在这里写下win32 API串口通信编程的一般流程:(1) 打开串口:CreateFile函数// get a handle to the port m_hComm = CreateFile("szPort", // communication port string (COMX) GENERIC_READ | GENERIC_WRITE, // read/write types 0, // comm devices must be opened with exc原创 2010-12-08 09:11:00 · 1552 阅读 · 0 评论 -
Windows完成端口与Linux epoll技术简介
WINDOWS完成端口编程 11、基本概念 12、WINDOWS完成端口的特点 23、完成端口(Completion Ports )相关数据结构和创建 24、完成端口线程的工作原理 45、Windows完成端口的实例代码: 6Linux的EPoll模型 81、为什么select落后 82、内核中提高I/O性能的新方法epoll 93、epoll的优点 104、epoll的工作模式 105、 e转载 2011-06-27 15:06:00 · 1886 阅读 · 2 评论 -
MFC 选择文件夹的对话框
<br />文件属性相关<br />1.判断文件是否存在<br />利用CFile类和CFileStatus类判断<br />CFileStatus filestatus;<br />if (CFile::GetStatus(_T("d://softist.txt"), filestatus))<br /> AfxMessageBox(_T("文件存在"));<br />else<br /> AfxMessageBox(_T("文件不存在"));<br />利用CFileFind类判断<br /转载 2011-05-02 19:24:00 · 4013 阅读 · 0 评论 -
MFC 选择文件夹的对话框
<br />BROWSEINFO bi; //BROWSEINFO结构体 <br />TCHAR Buffer[512]=_T(""); <br />TCHAR FullPath[512]=_T("");<br /> bi.hwndOwner = m_hWnd; //m_hWnd你的程序主窗口 <br />bi.pidlRoot = NULL;<br />bi.pszDisplayName = Buffer; //返回选择的目录名的缓冲区<br /> bi.lpszTitle = _T("请选择保存的文件夹转载 2011-05-02 18:24:00 · 790 阅读 · 0 评论 -
面试--stl容器--全局变量存储位置
昨天去面试,碰到几个很基础的问题,没有怎么回答上来,回来查了一下,记录下来: VC++中STL的容器都有哪些?答:vector 线性容器 deque 双端队列 stack 栈(适配器) queue 队列 (适配器) set 集合 multiset 可重复集合hash_set map 映射原创 2011-06-27 08:40:00 · 2526 阅读 · 2 评论 -
Setsockopt 用法及讨论
getsockopt 和 setsockopt获得套接口选项:int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln ) 设置套接口选项: int setsockopt ( int sockfd, int level, int optname, const void转载 2011-06-28 22:56:00 · 1343 阅读 · 0 评论 -
sendto与recvform接收数据中乱码问题
最近一直在数据转发问题,在工作的过程中碰到了一个令我非常头痛的问题,当我用函数sendto发送数据(例如sddaaa)时,可是在接收端有recvfrom接收数据,接收的数据居然是H直接贴代码,想问题:原创 2011-08-05 08:49:27 · 3751 阅读 · 0 评论 -
socket UDP TCP 的一些用法
UDP用最通俗的话讲,所谓UDP,就是发送出去就不管的一种网络协议。因此UDP编程的发送端只管发送就可以了,不用检查网络连接状态。下面用例子来说明怎样编写UDP,并会详细解释每个API和数据类型。7.1 UDP广播发送程序下面是一个用UDP发送广播报文的例转载 2011-08-05 10:06:19 · 3473 阅读 · 1 评论 -
C++控制台程序中使用定时器
转自博客:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html作者:洞庭散人“我现在项目是一个控制台程序,用到的Win32API都是与界面无关的,今天需要加入定时器刷新的功能,由于没有消息循环,所以转载 2011-08-05 12:17:24 · 2151 阅读 · 1 评论 -
c++日志类(对于c++控制台很有用的类)
有时候我们在写服务器端的程序的时候,经常需要用到日志,这几天在做些事情的时候,发现居然还没有我自己经常使用的一个日志类,正好现在又找到一个非常不错的日志类,所以把他记录下来,留待以后直接拿来用就可以了:Log.h/////////////////////////////原创 2011-08-05 15:03:45 · 3697 阅读 · 6 评论 -
怪异问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
今天在写socket编程的时候,碰到一个很怪异的问题,调试程序的位置为:test dword ptr [eax],eax ; probe page.这是什么问题呢?经过查证才知道:这跟局部数组变量定义所分配的最大空间设置大小有关。局部变量的申请空间是存原创 2011-09-05 15:19:01 · 7596 阅读 · 0 评论 -
Windows系统线程池+利用windows自带的线程池
come from:http://www.fuzhijie.me/?p=65一直想弄明白Windows的IO完成端口是什么,这个词语每每出现在我眼前时总是伴随着鲜花和赞美,因此我便将其同许多我从来没搞懂过的东西一起归为神秘一类。这两天一直在看《Windows核心编程》,学到了转载 2011-09-07 09:14:53 · 2154 阅读 · 0 评论 -
基于udp的网络编程socket的错误10054与SOCKET的发送与接收缓冲区的设置(udp丢包)
哎!长叹一声!今天上班很鬼火,被老板骂了一顿,严重的打击了我的自信!哎,鬼火啊,到今天下班以前,才把任务完成了一点点。明天要继续努力哦!总结今天碰到的问题。首先:今天在做一个视频转发器,用vlc播放器推视频流,通过转发器然后发送到另外一个pc,然后用vlc播放器播放,这些都是原创 2011-08-09 19:28:08 · 3864 阅读 · 0 评论 -
socket 错误分析(留下来碰到错误就来查查)
平台:xp sp3+vc6。测试方法:retval = function(....)if(retval == SOCKET_ERROR)r = WSAGetLastError();各种情况下的返回值由retval取得。错误号由r取得。错误查转载 2011-09-07 21:26:54 · 4539 阅读 · 0 评论 -
udp端口接收不到数据BUT抓包可以抓到数据,why?
今天在做网络开发的时候,在向一台服务器上发送数据的的时候,可是在服务器监听udp端口的程序一直接收不到数据,可是经过抓包工具,可是能够抓到数据,这到底是什么原因呢?晕倒中.....我在服务器做的程序又是写成了windows服务,所以一直找不到问题的所在,一直郁闷中....灵光原创 2011-09-07 21:20:03 · 11917 阅读 · 2 评论 -
COM组件封装与javascript调用返回未知对象
在进行com封装的时候碰到一个问题,在封装好的com组件,在对进行dll注册之后,在c#中调用很正常调用,可是居然在javascript中调用,居然无法调用,到底是怎么回事呢?崩溃啊!找了很久终于明白了。你在建好一个ATL项目的后,在添加类的时候:选择ATL简单对象之原创 2011-08-23 20:00:55 · 1582 阅读 · 0 评论 -
队列二重唱
队列是我们平时开发或者学习中经常会用到的一种数据结构。今天我们来看一下3中队列的不同代码。简单队列:在大学的学习中,我们都应该写过队列的代码,这种代码是最基本的代码:/* standard fifo in RAM WITHOUT synchronisation */#ifndef FIFO_H#define FIFO_H#define maxUrlsBySite原创 2012-03-08 21:00:39 · 813 阅读 · 0 评论 -
DFusion中lua调用c++生成的dll库,并且lua调用c++代码(遍历文件夹中整个目录)
首先:工具:生成dll用vs2008。一、首先生成lua库,即(*.lib)库1、在lua官网上下载lua源代码2、用vs2008建一个静态库,把lua源代码全加入到工程中,可以把lua.c、luac.c不用放到工程中。编译生成就可以了。二、生成dll库1.用vs2008建一个动态库,配置环境: 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器原创 2012-07-24 13:33:02 · 1956 阅读 · 0 评论 -
CALLBACK函数(转) - C/C++
<br />调用(calling)机制从汇编时代起已经大量使用:准备一段现成的代码,调用者可以随时跳转至此段代码的起始地址,执行完后再返回跳转时的后续地址。 CPU为此准备了现成的调用指令,调用时可以压栈保护现场,调用结束后从堆栈中弹出现场地址,以便自动返回。借堆栈保护现场真是一项绝妙的发明,它使调用者和被调者可以互不相识,于是才有了后来的函数和构件,使吾辈编程者如此轻松愉快。若评选对人类影响最大之发明,在火与车轮之后,笔者当推压栈调用。<br /> 话虽这样说,此调用机制并非完美。回调函数就是一例。函转载 2011-04-21 17:54:00 · 1461 阅读 · 0 评论 -
字节序---大端字节序、小端字节序
基本的字节序大端序大端序(英:big-endian)或称大尾序。小端序小端序(英:little-endian)或称小尾序。数据以8bit为单位:地址增长方向 →...0x0D0x0C0x0B0x0A...最低有效位(LSB,Least Significant Byte)是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。数据以16bit为单位:地址增长方向 →...0x0C0D0x0A0B...最低的16bit单元0x0C0D存储在低位。更改地址的增长方向:当更改地址的增长方向,使之由右至原创 2011-05-26 13:39:00 · 2191 阅读 · 0 评论 -
MFC 获得当前应用程序目录
<br />在写一些程序的时候,需要获得当前应用程序的目录,那么可以用下面的方法获得:<br />CString XmlParser::GetAppPath(){ TCHAR modulePath[MAX_PATH]; GetModuleFileName(NULL,modulePath,MAX_PATH); CString strModulePath(modulePath); strModulePath=strModulePath.Left(strModulePath.ReverseFi原创 2011-05-24 12:03:00 · 1098 阅读 · 0 评论 -
获取局域网中所有主机与IP地址
<br /> // GetLANIP.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <afxtempl.h>#include <WINSOCK2.H>#pragma comment(lib,"Ws2_32.lib")#pragma comment(linker, "/defaultlib:kernel32.lib")#pragma commen原创 2010-12-18 22:42:00 · 3653 阅读 · 2 评论 -
cfiledialog 打开目录出现乱码问题
<br />CString str("(*.txt)|*.txt|所有文件(*.*)|*.*||"); LPCTSTR lpszFilter=(LPCTSTR)(str.AllocSysString()); CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL); if (IDOK==file.DoModal()) { m_pathstr=file.GetPath原创 2010-12-18 12:07:00 · 2516 阅读 · 0 评论 -
WinAPI: ShellExecute - 打开外部程序或文件
ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定动作, 譬如: open、print} FileName: PChar; {指定要打开的文件或程序} Parameters: PChar; {给要打开的程序指定参数; 如果打开的是文件这里应该是 nil} Directory: PChar; {缺省目录} ShowCmd: Integer {打开选项}): HINST;转载 2010-12-18 18:20:00 · 743 阅读 · 0 评论 -
内存映射文件
<br />内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。<br />原创 2010-12-21 19:21:00 · 807 阅读 · 0 评论 -
c++获取电脑摄像头的信息,验证是否存在
#include "stdafx.h" #include "USBPort.h" #include "USBPortDlg.h" #include "setupapi.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ........ ........ HCURSOR CUSBPortDlg::转载 2010-12-27 15:57:00 · 3835 阅读 · 0 评论 -
vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
<br />WinExec,ShellExecute ,CreateProcess<br /> <br />可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。<br /> WinExec 两个参数,前一个指定路径,后一个指定显示方式。<br /> ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮转载 2010-12-25 18:45:00 · 854 阅读 · 0 评论 -
vc++连接Excel的基本用法,与操作
<br /> 今天帮朋友弄了一个小的程序,能够把Excel中数据进行整理,并且显示出来,c++可以直接连接Excel。连接语句为:<br /> CString strID; CString sItem1; CString sItem2; CDatabase database; CString sSql; CString sDriver; CString sDsn; // 检索是否安装有Excel驱动 "Microsoft Excel Driver原创 2010-12-24 22:19:00 · 3524 阅读 · 1 评论 -
MFC/C++/C中CString, int, string, char*之间的转换
1CString,int,string,char*之间的转换 string 转 CStringCString.format("%s", string.c_str()); char 转 CStringCString.format("%s", char*); char 转 stringstrings(char *); string 转 char * char *p = string.c_str(); // CString转std::stringCStringstr = dlg.GetPathName();set转载 2010-12-24 22:22:00 · 1055 阅读 · 0 评论 -
VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序...
<br />VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那 么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的 manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:<br />1、没有转载 2010-12-24 23:09:00 · 790 阅读 · 0 评论 -
google svn+TortoiseSVN使用方法
1.服务器端的配置使用在线代理 http://www.7daili.com/ 登录google code。地址:http://code.google.com/intl/zh-CN/。然后选择“项目托管”-->"贡献开放源代码项目",在“GettingStarted”页面中选择“Create Project”。如果没有登录Google,这时候要输入Google账户,就是gmail邮件账户。进入“Create Project”以后会要求输入项目信息,分别是"Project name"要求小写字母或者数字、"Pr转载 2010-12-29 14:24:00 · 1825 阅读 · 0 评论 -
复制数据至剪贴板
<br /> // 复制数据至剪切板BOOL KClipBoardDlg::CopyToClipboard_(const WCHAR* pszData, const int nDataLen){ if(::OpenClipboard(NULL)) { ::EmptyClipboard(); HGLOBAL clipbuffer; WCHAR *buffer; clipbuffer = ::GlobalAlloc(GMEM_MOVEABLE, nDataLen + si原创 2011-01-04 14:51:00 · 934 阅读 · 0 评论 -
获取CPU的ID,获取硬盘的序列号
<br />1、获取CPU的ID<br />DWORD CDlgRegister::GetCPUID(){ DWORD dwId1, dwId2, dwId3, dwId4; char szCompany[13]; PCHAR pCompany = szCompany; //DWORD dwCPU; szCompany[12]=0; _asm { pushfd pushad //取原创 2011-01-06 14:01:00 · 6416 阅读 · 1 评论 -
vs2010的H3Viewer 的安装,与vs2008的阅读msdn相同
<br />首先<br />打开VS2010之后,我们可以在“工具”菜单下找到“扩展管理器”,如下:<br /> <br /><br />打开“扩展管理器”之后,界面如下:<br /> <br />这个时候我们看到的是一个空的界面,这是很正常的,因为我们没有安装任何扩展。如果你当前的计算机可以连接到网络的话,点击“联机库”就可以看到联机的扩展了,下图是周公连接点击“链接库”的情形:<br /> <br />在扩展管理器的搜索栏输入"h3"就能搜到这个东东,如下:<br /> <br />点击下载安装就可以啦原创 2011-03-02 16:20:00 · 2664 阅读 · 0 评论 -
va_list、va_start、va_arg、va_end宏的使用方法
<br />当你的函数的参数个数不确定时,就可以使用上述宏进行动态处理,这无疑为你的程序增加了灵活性。<br />Example:<br />CString AppendString(CString str1,...)//一个连接字符串的函数,参数个数可以动态变化<br />{<br /> LPCTSTR str=str1;//str需为指针类型,因为va_arg宏返回的是你的参数的指针,但是如果你的参数为int等简单类型,则不必为指针,因为变量名实际上即是指针。<br /> CStri原创 2011-02-19 15:10:00 · 1013 阅读 · 0 评论 -
利用directshow进行摄像头的开发
<br /> 首先,我的系统是win7的,据说win7自带directX 所以不用再另外下载directX。<br />在头文件中添加 #pragma comment (lib,"Strmiids")#pragma comment (lib,"quartz")#include <Dshow.h>//// 所有DirectShow应用程序必备<br />首先:查找视频设备列表<br />void CCameraDlg::GetAllCapDevices(){ UINT uIndex原创 2011-03-08 13:58:00 · 3306 阅读 · 1 评论 -
基于DirectShow视频及图片捕获软件的开发(写的非常详细)在后几篇博客 我会更新
<br />我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻转载 2011-03-08 15:53:00 · 6382 阅读 · 0 评论 -
C的|、||、&、&&、异或、~、!运算
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。 (1)按位与运算符(&) 按位与运算将两个运转载 2011-05-14 09:24:00 · 10065 阅读 · 2 评论 -
类的内存结构
#include using namespace std;class Base {public:virtual void h() { cout virtual void h2() { cout int x;int y;}; typedef void(*Fun)(void);//函数指针 void main() {Bas原创 2014-08-17 12:05:13 · 911 阅读 · 0 评论