读万卷书不如行万里路呀
微信公众号:taogyouji,欢迎志同道合的朋友相互交流分享!
展开
-
批量对文件进行重命名
需求分析:碎片文件特别多,需要对这些文件进行重命名,比如瓦片地图有的是jpg,有的是png,而你的gis显示软件需要png。原创 2024-03-07 08:13:09 · 153 阅读 · 0 评论 -
MFC之多线程使用demo
需求:1、新建线程,完成udpsocket端口监听,持续接收数据;2、接收到的数据绘制到MFC对话框的界面上。知识点:1、SOCKET的使用2、线程的创建和安全退出3、线程函数如何使用主线程中的变量4、线程函数收到的数据如何传递到主线程中,供控件使用创建线程,传递this到线程函数中:m_iShowValue = 0;m_bIsRun = true;AfxBeginThread(Fun, this, NULL);线程函数:UINT Fun(LPVOID pP.原创 2020-05-14 22:04:14 · 569 阅读 · 0 评论 -
socket bind一直返回-1
今天准备写个dll,专门去干数据接收--处理--转发的事情,用的SOCKET,发现bind一直失败,以前记得MFC下面用CSocket的时候,需要用AfxSocketInit进行初始化。想想这里是不是也是同样的问题。百度一下,果然如此。WASAtarup()就是他,需要用这个函数进行初始化。我想,其实AfxSocketInit也只是对WASAtarup()进行了封装吧。...原创 2020-05-13 21:22:45 · 4566 阅读 · 0 评论 -
recordset.open()各参数的含义
今天再次发现数据库这块,自己还是很薄弱,今天用while(!recordset->adoEOF)明明表中没有符合条件的,但是还是会执行一次循环体和record->GetRecordCount()发现返回的总是-1,后来发现是因为——与具体执行什么样的查询语句及recordset.原创 2011-09-01 23:12:06 · 1260 阅读 · 0 评论 -
MFC下ADO方式操作数据库
困扰多天的问题,今天突然解决,其实如果理解问题的思路理清了对了,解决问题确实是水到渠成了打开数据库m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);while (!m_pRs->adoEOF){ //此记录符合一定条件 m_pRs原创 2011-06-23 16:42:00 · 1328 阅读 · 0 评论 -
VC中ADO连接数据库,自己电脑上可以运行,访问其他数据库则报错
这两天闲着无事,写了一个MFC下对话框工程的查询小应用软件,由此引发了一系列血案:《血案二》症状:在msado15.dll中出现中断解决方法:sql.Format(_T("update table2 set iTemp1=1 where varchar1=%s "),strTemp);此句sql语句中应该注意varchar类型及datetime类型,问题即可解决(%s加单引号,勿把sql语句中的%原创 2011-06-15 00:51:00 · 2253 阅读 · 0 评论 -
VC连接SQL SERVER数据库
<br />今天第一次用vc(MFC)连接sqlserver数据库,本以为很简单,却由于没有用afxoleinit函数初始化,所以迟迟连接不上。作为第一次的我,不知道是否该原谅自己所犯下的这么低级的错误?<br />据说vc编程分为界面、数据库、网络这三大块,而自己只会简单的用下原创 2011-04-29 00:06:00 · 1289 阅读 · 0 评论 -
字符串为什么要用_T()
还记得一同事对我这个刚走出校门的菜鸟说过写程序时,记得加上_T(),当时问他为什么,他没有给解释,现在想想自己真是傻,这种问题该自己百度或谷歌一下的,今天想想,还是把它在网上查下,然后记录在博客里吧,留着以后用......._T是一个宏定义VC++里面定义字符串的时候,用_T来保证兼容性。VC++支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。如果将来你不打算升级到unicode,那么也不需要_T。_t("hell原创 2010-12-12 19:21:00 · 950 阅读 · 0 评论 -
对于对话框WM_CREATE和WM_INITDIALOG的区别
在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。而WM_INITDIALOG消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改。原创 2010-12-12 18:53:00 · 1483 阅读 · 1 评论 -
有关冒泡排序
<br />今天突然需要用到排序,就想到了冒泡,可是突然发现自己搞不清楚该算法的思路了,现整理了一下思路,贴出来,以备自己不时之需:<br />#include "stdio.h"<br />void main()<br />{<br /> int i=0,j=0;<br /> int temp=0;<br /> int flag=0;<br /> int a[10]={80,56,34,29,87,20,15,10,5};<br /> for(i=0;i<10;i++)<br /> {<br /> fl原创 2010-12-14 21:52:00 · 472 阅读 · 0 评论 -
各类型变量与零值的比较
<br />1.布尔变量与零值比较<br />假设flag为布尔类型变量,它与零值比较的标准if语句如下:<br />if(flag)//表示flag为真<br />if(!flag)//表示flag为假<br />一下都为不良风格,应为TRUE的值没有明确的定义<br />if (flag == TRUE) <br />if (flag == 1 ) <br />if (flag == FALSE) <br />if (flag == 0) <br />2.浮点变量与零值比较<br />千转载 2010-12-18 12:30:00 · 669 阅读 · 0 评论 -
有关结构体字节对齐方式
今天偶然碰到对如下两个结构体进行sizeof()运算:struct example1{ char a; double b; long l;};struct example2{ char a; long l; double b;};在计算机上运行后得到分别为24,16,网上查了一下,得到如下理解:1.计算方式:sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( trailing padding ) 2.结构体某个成员原创 2010-12-18 16:55:00 · 631 阅读 · 0 评论 -
有关全局变量和局部变量的一个code
<br />#include "iostream.h"<br />int a=3;<br />void main()<br />{<br /> int a=10;<br /> cout<<::a<<endl;<br /> cout<<a<<endl;<br /> return 0;<br />}原创 2010-12-20 16:26:00 · 518 阅读 · 0 评论 -
搞定内存对齐
在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了。一、内存对齐的原因大部分的参考资料都是如是说的: 1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛转载 2010-12-18 21:34:00 · 495 阅读 · 0 评论 -
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
<br />关于这个问题,google了一下,得到如下信息(个人水平问题,现在看问题都还是停留在表面):<br />为了告诉c++编译器,这个函数要到c库中去找。<br />顺便看了一下extern的解释:<br />作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 <br />通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局原创 2010-12-18 21:51:00 · 597 阅读 · 0 评论 -
一个五位数abcde*4=edcba(数字不重复)
<br />#include "iostream.h"<br />void main()<br />{<br /> for(int i=10000;i<1000000;i++)<br /> {<br /> int j=0;<br /> int t=i;<br /> while(t!=0)<br /> {<br /> j=j*10+t%10;<br /> t/=10;<br /> }<br /> if((i<<2)==j)<br /> {<br /> cout<<i<<endl<<j原创 2010-12-20 18:42:00 · 1633 阅读 · 0 评论 -
传值调用与传址调用
<br />//其本质应该还是传值调用<br />#include "stdio.h"<br />void temp(int *a,int *b)<br />{<br /> int *temp=0;<br /> temp=a;<br /> a=b;<br /> b=temp;<br />}<br />void main()<br />{<br /> int a=1;<br /> int b=2;<br /> temp(&a,&b);<br /> printf("%d,%d/n",a,b);<br />}<b原创 2010-12-20 21:26:00 · 557 阅读 · 0 评论 -
有关#ifndef #define #endif
<br />在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。 <br />方法:例如要编写头文件test.h <br />在头文件开头写上两行: <br />#ifndef _TEST_H <br />#define _TEST_H//一般是文件名的大写 <br />头文件结尾写上一行:<br /> #endif <br />这样一个工程文件里同时包原创 2010-12-17 14:33:00 · 567 阅读 · 0 评论 -
有关static
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variablevoid msg(){printf("Hello/n");}下面是main.c的内容int main(void){extern ch原创 2010-12-18 10:59:00 · 491 阅读 · 0 评论 -
不使用中间变量,实现两个变量值的交换
<br />#include "iostream.h"<br />void main()<br />{<br /> int a=9,b=5;<br /> cout<<a<<endl<<b<<endl;<br />/*<br /> a=a+b;<br /> b=a-b;<br /> a=a-b;<br />*/<br /> a=a^b;<br /> b=a^b;<br /> a=a^b;<br /> cout<<a<<endl<<b<<endl;<br />}原创 2010-12-20 16:17:00 · 649 阅读 · 0 评论 -
今天才知道printf就算参数是从右到左压栈的
<br />#include "iostream.h"<br />void main()<br />{<br /> int b=3;<br /> int arr[]={6,7,8,9,10};<br /> int *ptr=arr;<br /> *(ptr++)+=123;<br /> cout<<*ptr<<endl;<br /> cout<<*(++ptr)<<endl;<br />}<br />输出为:7,8而<br />#include "iostream.h"<br />void main()<b原创 2010-12-20 17:30:00 · 739 阅读 · 0 评论 -
求出一个数的二进制形式中有几个1
<br />#include "iostream.h"<br />void main()<br />{<br /> int count=0;<br /> int m=15;<br /> while(m){<br /> count++;<br /> m=m&(m-1);<br /> }<br /> cout<<count<<endl;<br />}<br />原创 2010-12-20 18:46:00 · 608 阅读 · 0 评论 -
不用循环语句,判断一个数是否是2的次方
<br />#include "iostream.h"<br />void main()<br />{<br /> int m=1;<br /> if(!(m&(m-1))){<br /> cout<<"YES"<<endl;<br /> }<br /> else<br /> {<br /> cout<<"NO"<<endl;<br /> }<br />}原创 2010-12-20 18:52:00 · 655 阅读 · 0 评论 -
有关白盒测试
<br />什么是白盒测试:又称结构测试、逻辑驱动测试或基于代码的测试。<br />六种白盒测试方法:1.语句覆盖2.条件覆盖3.路径覆盖4.判定覆盖<br />5.判定/条件覆盖6.条件组合覆盖<br />在网上竟然没有查到对这几种覆盖方法的性能比较,我暂且理解为:程序的复杂度不同,测试用例不同,各个覆盖方法性能不同吧。原创 2010-12-21 20:45:00 · 641 阅读 · 0 评论 -
STL中有哪几种容器
C++ 之高效使用STL (STL 容器的选择) : 你知道C++中有很多你可以支配的容器,但是你意识到有多少吗?要确定你没有忽略你的选项,这里有一个快速回顾。 •标准STL序列容器:vector、string、deque和list。 •标准STL关联容器:set、multiset、map和multimap。 •非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。(“绳子(rope)”是重型的“线(string)”。明白了吗?)你可以找到一个关于这些非标准(但常见转载 2010-12-21 21:39:00 · 4609 阅读 · 1 评论 -
有关UML
作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。 (1) UML语义 描述基于UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外UML还支持对元模型的扩展定义。 (2) UML表示法 定义UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。 标准建模语言U转载 2010-12-21 22:05:00 · 492 阅读 · 0 评论 -
作为函数形参的数组,在函数体内,数组名仅仅是个指针
<br />#include "iostream.h"<br />void test(char m_cV2[100])<br />{<br /> cout<<sizeof(m_cV2)<<endl;<br />}<br />void main()<br />{<br /> char m_cV1[10];<br /> test(m_cV1);<br /> cout<<sizeof(m_cV1)<<endl;<br />}<br />输出:4,10原创 2010-12-22 17:01:00 · 514 阅读 · 0 评论 -
三种嵌入式操作系统的分析与比较
摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。 关键词:嵌入式系统 嵌入式操作系统 Palm OS Windows CE Linux1 嵌入式系统与嵌入式操作系统1.1 嵌入式系统嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。嵌入式系统应具有的特点是:高可靠性;在恶劣转载 2010-12-21 21:54:00 · 704 阅读 · 0 评论 -
线程同步互斥的控制方法
<br />四种进程或线程同步互斥的控制方法 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一转载 2010-12-21 22:18:00 · 612 阅读 · 0 评论 -
有关PV操作
<br />在计算机操作系统中,PV操作是进程管理中的难点。<br />首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:<br /> P(S):①将信号量S的值减1,即S=S-1;<br /> ②如果S³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。<br /> V(S):①将信号量S的值加1,即S=S+1;<br /> ②如果S>0,则该进程继续执行;否则释放队列中第一转载 2010-12-21 22:24:00 · 568 阅读 · 0 评论 -
线程与进程的区别
<br />说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. <br />线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. <br />一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 <br />说法二:进程和线程都是由操转载 2010-12-28 20:41:00 · 398 阅读 · 0 评论 -
关于B/S和C/S架构的探析
<br />当今世界科学技术飞速发展,尤其以通信、计算机、网络为代表的互联网技术更是日新月异,令人眼花燎乱,目不睱接。由于计算机互联网在政治、经济、生活等各个领域的发展、运用以及网络的迅速普及和全社会对网络的依赖程度,计算机网络已经成为国家的经济基础和命脉,成为社会和经济发展强大动力、,其地位越来越重要。但是,由于主流技术研发企业和用户对“B/S”和“C/S”技术谁优谁劣、谁代表技术潮流发展等等问题的争论不休,已经给检察机关使用“OA(办公)”和“案件管理”软件工作开展带来困惑,本文就此两项技术发展变化和应转载 2010-12-29 22:25:00 · 1489 阅读 · 0 评论 -
指针实现字符串逆序
<br />#include "iostream.h"<br />#include "string.h"<br />//////字符串逆序指针实现///////<br />//////南飞雁2010.12.31/////////<br />char *Reverse(char *s)<br />{<br /> char temp;<br /> char *p;<br /> p = s+strlen(s)-1;<br /> while(s<p)<br /> {<br /> temp=*p;<br /> *原创 2010-12-31 13:25:00 · 1622 阅读 · 0 评论 -
数字时钟最简单的一种做法
<br />步骤:<br />1.建立基于对话框的工程<br />2.利用三个static text,并关联三个变量<br />3.写一个函数读取系统时间并显示在三个static text中<br />核心知识点:<br />1.static text控件的使用及其关联变量的方法<br />2.定时器的使用方法<br />3.time_t类型变量,strftime()time()localtime()函数的使用<br />运行效果如下:<br /><br />原创 2011-01-02 20:40:00 · 1507 阅读 · 0 评论 -
MFC中有关鼠标单击双击响应的问题
<br />今天修改一程序的Bug,修改了半天,终无头绪。后猛然发现是因为双击的时候,也是响应单击消息函数。遂google,发现:Windows系统在系统的双击时间限制里双击鼠标左键调用OnLButtonDBlClk,双击鼠标左键实际上产生4个事件:WM_LBUTTONDOWN WM_LBUTTONUP,然后WM_LBUTTONDBLCK被调用,鼠标释放时的WM_LBUTTONUP消息。<br />最后还是实现了所需功能,但是感觉还不理想,如果能在PreTranslateMessage函数里面实现就更好了.原创 2011-02-27 22:35:00 · 8847 阅读 · 1 评论 -
关于限制edit控件中输入变量的类型的问题
需求:对话框上面有一edit控件,只允许输入int型变量,输入任何非int型,都要弹出对话框提示错误问题:1.我在vc6.0下面做个Demo时(给edit控件关联一个int型变量),可以满足需求 2.在vs2005下面采取同样关联变量的方法(出现问题:输入2hh,竟然没有提示错误,输入hh时,单击ok按钮,竟然弹出两次提 示的那个对话框)暂时只想到了两个思路:1.采用EN_CHANGE事件函数,自己判断,若输入非全部为数字,则自己弹出消息框,而非调用系统弹出的对话框原创 2011-02-28 22:51:00 · 1206 阅读 · 0 评论 -
VC中操作INI文件的函数
<br />今天需了解vc中如何读取ini文件,发现一兄台博文中介绍的如此详细,因此转帖到此,以备后用......<br />VC中操作INI文件的函数主要有:<br />函数名功能备注GetPrivateProfileInt 读取INI文件指定块中的键名对应的整数值。 GetPrivateProfileSection记取INI文件指定块中的所有键名及其对应值。 GetPrivateProfileSectionNames读取一INI文件中所有的块名。 GetPriv转载 2011-03-02 18:10:00 · 7726 阅读 · 3 评论 -
cannot open file "mfc42u.lib"
问题提出:VC提示找不到mfc42u.lib错误(cannot open file "mfc42u.lib")说明:LINK: fatal error LNK1104: cannot open file "mfc42u.lib" 表明安装VC时没有安装 Unicode版本解决问题方法总结:方法一:从VC的安装盘中拷贝文件“MFC42U.LIB”、“MFC42UD.LIB”、“MFCS42U.LIB”、“MFCS42UD.LIB”几个对Unicode支持的代码“VC的安装目录/VC98/MFC/Lib”下即可转载 2011-05-31 20:46:00 · 5427 阅读 · 1 评论 -
如何用CFileDialog得到一个文件夹的路径?
今晚突发奇想想做一个类似widows的搜索文件小程序,在http://topic.youkuaiyun.com/t/20041027/15/3496061.html发现一段经典代码特记录如下,以备不时只需。code:void CFindFileDlg::OnButton1() { // TODO: Add your control notification handler code here BR原创 2011-06-07 00:20:00 · 4555 阅读 · 1 评论 -
如何比较两个datetime的大小
今天写了个小程序里面用到了比较两个日期时间的大小,发现自己很傻很天真,特此一贴,以作纪念:思路变化:1.CString strSystemTime; //获取系统时间COleDateTime colTime = COleDateTime::GetCurrentTime(); strSystemTime = colTime.Format(_T("%Y-%m-%d %H:%M:%S原创 2011-06-12 17:57:00 · 7139 阅读 · 0 评论