Tag Archives: c
warning C4172: 返回局部变量或临时变量的地址
msdn的解释是 A function returns the address of a local variable or temporary object. Local variables and temporary objects are destroyed when a function returns, so the address returned is not valid. Redesign the function so that it does not return … Continue reading
WaitForSingleObject
DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。 hHandle可以是下列对象的句柄: Change notification Console input Event Job Memory resource notification Mutex Process Semaphore Thread Waitable timer WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。在这里举个例子: 先创建一个全局Event对象g_event: CEvent g_event; 在程序中可以通过调用CEvent::SetEvent设置事件为有信号状态。 下面是一个线程函数MyThreadPro() UINT CFlushDlg::MyThreadProc( LPVOID pParam ) … Continue reading
main.cpp(27): error C3646: “HWND”: 未知重写说明符(unknown overide specifier)
main.cpp(27): error C3646: “HWND”: 未知重写说明符(unknown overide specifier) 这个main.cpp #include了db.h,db.h里面有个声明: void FilterContent(contentStruct* contentParam) 而这个声明因为疏忽没有用分号结尾,所以就造成了未知重写说明符报错。
windows平台cl.exe编译pcre 8.13
最近在windows平台开发的一个project需要使用正则表达式,当然自己实现一个regexp也是可以的,只是太蛋疼且技术不到家。所以我优先考虑了open source的library,pcre是比较有名的库,在linux编译都是普通的套路,不过在win下面就稍微麻烦一点了。 主要参考tombkeeper兄的《VC编译pcre备忘》一文。具体步骤参考如下: 下载最新的pcre:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.13.zip (zip/tar.gz/tar.bz2三种格式任选一种,windows的一般用zip),并解压。 重命名config.h.generic为config.h,这是generic配置文件,需要根据具体的环境对预编译做相应修改。 HAVE_BCOPY 1改为0,HAVE_INTTYPES_H 1改为0,HAVE_STDINT_H 1改为0。 如果不修改,在下面编译dftables的步骤中会报错: pcre_internal.h(198) : fatal error C1083: Cannot open include file: 'inttypes.h': No such file or directory 重命名pcre.h.generic为pcre.h,重命名pcre_chartables.c.dist为pcre_chartables.c cl -MD -DHAVE_CONFIG_H dftables.c生成dftables.exe dftables.exe pcre_chartables.c (修改了一些注释,不知道目的何在) cl -O1 -MD -DHAVE_CONFIG_H -c pcre_chartables.c … Continue reading
USBAutoCopy:USB存储设备文件自动复制
在公司上班的同事工作有一部分是拷贝终端里面SD卡的日志,日志(文本文件)存在于不同的目录,以前每次电脑插上SD卡之后进入不同的目录ctrl+C然后再ctrl+V,而且每个终端的日志都要根据终端唯一ID号分别放在单独的目录。工作十分繁琐耗时,当我写完这个UsbAutoCopy之后,才发现以前的拷贝方式简直是弱爆了。下面图中的【D:\test\105285】105285就是终端唯一ID号。 用法 运行程序,在【文件列表】文本框里面填写需要在移动存储设备中拷贝的文件列表,每个文件一行,必须要“\"开头。不要有留空行,【复制到目录中】设置拷贝目标文件夹,必须是一个已经存在的目录,并且不能为空。移动存储设备(U盘、SD卡….)插入后程序自动识别盘符并开始复制文件。并在【日志】中显示复制文件的结果是成功还是失败,以及失败原因。 下载 因为这个程序针对公司内部,对其他人来说没有任何实用价值,给出二进制和源码仅供交流参考。 实用visual studio 2010开发,二进制zip里面已经加入vc++ 2010 runtime(msvcr100.dll),某些系统如果无法运行,请下载Microsoft Visual C++ 2010 可再发行组件包 (x86) 源码:http://tunps.com/lab/uac/UsbAutoCopy.V1.0.Src.zip http://tunps.com/lab/uac/ 二进制: http://tunps.com/lab/uac/UsbAutoCopy.V1.0.Bin.zip
linux简单tcp通讯
server: #include <sys/socket.h>#include <stdio.h>#include <netdb.h>#include <errno.h>#include <string.h>#include <stdlib.h>#include <netinet/in.h>#include <sys/types.h> #define portnum 3456 int main(int argc,char *argv[]){ int s_fd,c_fd; char buffer[1024]; struct sockaddr_in server_addr;//服务器ip地址 struct sockaddr_in client_addr;//客户端ip地址 int nbytes; int cli_size; /* struct sockaddr_in { short int sin_family; //ip地址族 unsigned short int sin_port; //端口号 struct in_addr sin_addr; //ip地址 unsigned char sin_zero[8]; //填0 } */ /* struct in_addr { unsigned long s_addr; } */ s_fd=socket(AF_INET,SOCK_STREAM,0); //地址描述,套接口类型,套接口所用的协议 if(s_fd==-1) { fprintf(stderr,”Socket … Continue reading
linux编程:warning incompatible implicit declaration of built-in function ‘printf’
请确认调用printf函数的文件引用了头文件 #include <stdio.h>
linux编程错误 error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{‘ token
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{‘ token 请确认函数声明最后有分号(;)
ado数据库读取例子
用appwizard新建一个dialog based的mfc项目,加入项目名字叫“contact”, 在StdAfx.h底部加入代码: #import “c:\program files\common files\system\ado\msado15.dll” no_namespace rename(“EOF”,”adoEOF”) CContactDlg::OnInitDialog()代码如下 BOOL CContactDlg::OnInitDialog(){ CDialog::OnInitDialog(); // Add “About…” menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if … Continue reading
ADO第一次亲密接触 — ADO开发实践之一
ADO第一次亲密接触 — ADO开发实践之一 作者:浙江省温岭市电信公司 王骏 via 一、ADO简介 ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。本文将详细地介绍在VC下如何使用ADO来进行数据库应用程序开发,并给出示例代码。 本文示例代码 二、基本流程 万事开头难,任何一种新技术对于初学者来说最重要的还是“入门”,掌握其要点。让我们来看看ADO数据库开发的基本流程吧! (1)初始化COM库,引入ADO库定义文件 (2)用Connection对象连接数据库 (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。 (4)使用完毕后关闭连接释放对象。 准备工作: 为了大家都能测试本文提供的例子,我们采用Access数据库,您也可以直接在我们提供的示例代码中找到这个test.mdb。 下面我们将详细介绍上述步骤并给出相关代码。 【1】COM库的初始化 我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码: BOOL CADOTest1App::InitInstance() { AfxOleInit(); …… 【2】用#import指令引入ADO类型库 我们在stdafx.h中加入如下语句:(stdafx.h这个文件哪里可以找到?你可以在FileView中的Header Files里找到) #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。 … Continue reading