C/C++
文章平均质量分 71
dlfer11
这个作者很懒,什么都没留下…
展开
-
“给定一个小点的输入,完整单步跟踪一遍。”是理解递归函数工作原理的不二法门!
C/C++ code #include <iostream>#include <string>usingnamespace std;class Queen{ public: Queen(); ~Queen(); private: int result; string queen[8]; int state[8]; voidset(int,int); b原创 2011-05-17 12:24:00 · 410 阅读 · 0 评论 -
MFC修改程序框架
1.修改窗口大小:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中修改cs值,例如cs.cx=100;cs.cy=200;2.修改窗口标题:cs.style&=~FWS_ADDTOTITLE;cs.lpszName="要添加的标题";3.改变窗口类型:在int CMainFrame::OnCreate(LPCRE转载 2011-10-25 11:22:24 · 1340 阅读 · 0 评论 -
MFC绘图
1 几何对象的结构和类为了使用绘图函数,应该先了解绘图所用到的几种表示几何对象的结构和类。这些结构和类分别定义在头文件windef.h和afxwin.h中。1.点1)点结构POINT点数据结构POINT用来表示一点的x、y坐标:typedef struct tagPOINT { LONG x; LONG y; } POINT;2)点类CPoint转载 2011-10-25 11:24:35 · 836 阅读 · 0 评论 -
MFC90条技巧
1."属性页的添加: 2."List Control中标题栏(Column)的添加: 3."ToolBar和StatusBar中控件的添加: 4."通过Control创建的控件,对其属性的动态控制: 5."窗口的分割与停靠: 6. ①怎样在程序开始的时候让它最大化? ②vc++做出来的exe文件在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能? ③如何在显转载 2011-10-27 13:01:00 · 1618 阅读 · 0 评论 -
MFC截取桌面背景图
在OnPaint()函数里面添加如下代码:CWnd* wnd = GetDesktopWindow(); CWindowDC cdc(wnd); int width = GetSystemMetrics(SM_CXSCREEN); int heigth = GetSystemMetrics(SM_CYSCREEN); CRect rec转载 2011-11-14 12:18:25 · 540 阅读 · 0 评论 -
vs调试部分断点进不去的问题
部分断点进不去,而其他类的函数却可以进去,最终解决了方案如下:tools->options->dubugging->general->require source files to exactly match the original version ,把这一项的勾取消,即disable ,就可以了。原创 2012-12-06 15:41:11 · 5606 阅读 · 1 评论 -
CryptoAPI例子-最全2
// 裸签void BareSignData(BYTE* orgData, int orgSize, LPCSTR inFileName = NULL, LPCSTR outFileName = NULL){ // 准备数据 CRYPT_DATA_BLOB orgBlob; prepareData(orgData, orgSize, inFileName, o转载 2015-12-17 17:53:50 · 1541 阅读 · 0 评论 -
简单实现强大的加密功能——CryptoAPI
CryptoAPI是Microsoft提供的加密应用程序接口,他其实是一组函数,他为许多高级安全性服务提供了基础,包括用于电子商务的SET,用于加密客户机/服务器消息的PCT,用于在各个平台之间来回传递机密数据和密钥的PFX,代码签名等等。 支持这种功能的主要有2000/XP(98和ME下不详) 其配置信息(密钥)主要在 HKEY_LOCAL_MACHINE\SOFTWARE\Mi转载 2015-12-17 18:00:53 · 4762 阅读 · 0 评论 -
Microsoft CryptoAPI加密技术(一)[转载vckbase作者Cuick]
在这个信息爆炸的时代,我们不得不对信息的安全提高警惕。加密作为保障数据信息安全的一种方式,越来越受到人们的关注。下面,我将把自己对Microsoft CryptoAPI的一些肤浅的理解与大家共享,有什么不妥之处望不吝赐教。一、 加密方法:当初,计算机的研究就是为了破解德国人的密码,人们并没有想到计算机给今天带来的信息革命。随着计算机的发展,运算能力的增强,密码学已经取得了巨转载 2015-12-17 18:05:34 · 699 阅读 · 0 评论 -
CAPI&CAPICOM的一些知识[转]
1 引言CryptoAPI(一个应用程序编程接口)目的就是提供开发者在Windows 下使用PKI 的编程接口。CryptoAPI 提供了很多函数,包括编码、解码、加密、解密、哈希、数字证书、证书管理和证书存储等功能。对于加密和解密,CryptoAPI 同时提供基于会话密钥和公钥/私钥对的方法。 在本项目中在VB编程环境中使用了CryptoAPI2.0和转载 2015-12-17 18:06:47 · 2923 阅读 · 0 评论 -
学习CRYPTOAPI第一天
一:准备工作 一般必须包含如下头文件以及定义 #include #include #include #define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) 当包含wincrypt.h头文件时,一般都需要定义#define _WIN32_WINNT 0x(具体的转载 2015-12-17 17:57:43 · 1805 阅读 · 0 评论 -
cryptAcquireContext函数
功能:连接CSP,获得指定CSP的密钥容器的句柄;原型:BOOL WINAPI CryptAcquireContext( __out HCRYPTPROV *phProv, //CSP句柄指针 __in LPCTSTR pszContainer, //密钥容器名称,指向密钥容器的字符串指针; //如果dwFlags转载 2015-12-17 17:59:05 · 16691 阅读 · 0 评论 -
CryptoAPI例子-最全1
MS CryptoAPI Samples // examCrypt.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"// Link with the Crypt32.lib file.#pragma comment(lib, "Crypt32")#pragma comment(lib, "comsuppw.lib")#defin转载 2015-12-17 17:54:59 · 2996 阅读 · 0 评论 -
CryptoAPI例子-最全3
// 设置加密参数 CRYPT_ENCRYPT_MESSAGE_PARA EncryptPara; memset(&EncryptPara, 0, sizeof(EncryptPara)); EncryptPara.cbSize = sizeof(CRYPT_ENCRYPT_MESSAGE_PARA); EncryptPara.dwMsgEncodingTy转载 2015-12-17 17:51:45 · 1450 阅读 · 0 评论 -
学习CRYPTO第二天
因为是.net安全,所以必须在VC7上运行下面面的一些例子(今天害得我在VC6上运行,错误一大堆),上面介绍了CRYPTAPI的一些基础,下面我就不按照MSDN的往下看了,下面的几个专题是Hashing,Signing Data,Creating and Receiving Enveloped Data Messages以及Encrypting and Decrypting.这些专题等需要用到的时转载 2015-12-17 17:56:40 · 1760 阅读 · 0 评论 -
Microsoft CryptoAPI加密技术(二)[转载vckbase作者Cuick]
上次我们讲了Microsoft CryptoAPI的构成以及会话密钥的使用。接下来我们将看一下公私密钥对的使用、HASH算法、数字签名等技术。一、 公用密钥加密技术公用密钥加密技术使用两个不同的密钥:公钥和私钥。私钥必须安全的保管好不能被外人知道,而公钥可以告诉任何人,只要他需要。通常公钥是以数字证书的形式发布的。用公私密钥对中的一个密钥加密的数据只能用密钥对中的另一个密钥才能解密转载 2015-12-17 18:03:47 · 624 阅读 · 0 评论 -
Visual C++/MFC入门教程
Visual C++/MFC入门教程VC开发指南1.1 如何学好VC 这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。万事开头难,为了帮助朋友们更快的掌握VC开发,下面我将自己的一点体会讲一下: 1、需要有好的C/C++基础。正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字转载 2011-10-25 11:20:31 · 1159 阅读 · 0 评论 -
MFC ListControl控件用法
开发环境:visual studio 20081、新建一个基于对话框的MFC应用程序。在对话框上拖放一个listcontrol控件和一个button控件,给listcontrol控件添加一个名为m_StoreItems的变量。添加button的点击响应函数。void CD转载 2011-10-18 10:01:08 · 1085 阅读 · 0 评论 -
虚函数纯虚函数的用法
<br />虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。 下面是一个实例:<br />#i nclude "stdio.h" <br />#i nclude "conio.h" <br />class Parent <br />{ <br />public: <br /> char data[20]; <br /> void Function1(); <br /> virtual void Func原创 2011-05-19 14:02:00 · 283 阅读 · 0 评论 -
什么是多态
<br />多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。<br />编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。 <br />对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽原创 2011-05-23 18:23:00 · 14776 阅读 · 1 评论 -
深入理解C++的动态绑定和静态绑定
<br />为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。<br />需要理解四个名词:<br />1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。<br />2、对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。<br />关于对象的静态类型和动态类型,看一个示例:<br />view plaincopy to clipboardprint?<br />class B原创 2011-05-20 17:58:00 · 481 阅读 · 0 评论 -
纯虚函数
<br />一、定义<br /> 纯虚函数是一种特殊的虚函数,它的一般格式如下: <br /> class <类名> <br /> { <br /> virtual <类型><函数名>(<参数表>)=0; <br /> … <br /> }; <br /> 在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函<br /> <br />数的作用。 二、引入原因<br /> 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函原创 2011-05-24 11:01:00 · 432 阅读 · 0 评论 -
成员函数指针与高性能的C++委托(中篇)
<br />Member Function Pointers and the Fastest Possible C++ Delegates<br /><br />撰文:Don Clugston <br />Don Clugston <br />翻译:周翔<br />(接上篇)<br />成员函数指针——为什么那么复杂?<br /><br />类的成员函数和标准的C函数有一些不同。与被显式声明的参数相似,类的成员函数有一个隐藏的参数this,它指向一个类的实例。根据不同的编译器,this或者被看作内部的一个正原创 2011-05-26 10:12:00 · 333 阅读 · 0 评论 -
虚函数和纯虚函数的作用与区别
<br />虚函数和纯虚函数的作用与区别<br />虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!<br />纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!<br />虚函数<br />引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。<br />class Cman<br />{<br />public:<br />virtual void Eat(){……};<br />void Move();<br原创 2011-05-24 11:17:00 · 295 阅读 · 0 评论 -
C++中操作符operator的两种用法
<br />1.operator overloading<br />C++可能通过operator 重载操作符,格式如下:类型T operator 操作符 (),如比重载+,如下所示<br />template<typename T> class A<br />{<br />public:<br /> const T operator + (const T& rhs)<br /> {<br /> return this->m_ + rhs;<br /> }<br />priv原创 2011-05-24 11:59:00 · 526 阅读 · 0 评论 -
c++中冒号(:)和双冒号(::)的用法
<br />1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; XXX (2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。 st<br />1.冒号(:)用法<br />(1)表示机构内位域的定义(即该变量占几个bit空间)<br />typedef struct _XXX{<br />原创 2011-05-25 10:07:00 · 596 阅读 · 0 评论 -
C++中操作符operator的两种用法
<br />虚函数和纯虚函数的作用与区别<br />虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!<br />纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!<br />虚函数<br />引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。<br />class Cman<br />{<br />public:<br />virtual void Eat(){……};<br />void Move();<br原创 2011-05-24 11:57:00 · 520 阅读 · 0 评论 -
C++中virtual的作用
<br />今天研究了C++中virtual关键字的作用,发现这是C++中继承和多态的一个关键要素。以前一直不知道virtual有什么用,只是照着书抄设计模式,今天才知道,设计一个层次关系,virtual是必不可少的。<br /> <br /> 考虑以下几个类声明:<br /> <br />class Animal<br />{<br />char* ap;<br />public:<br />Animal();<br />virtual ~Animal();<br />virtual void fo原创 2011-05-24 10:19:00 · 2476 阅读 · 3 评论 -
谈谈explicit关键字
<br />今天看到公司的代码内有大量的explicit关键字,但是老版的MSDN内例子并不完善,实在是不明白,最终从网上一篇文章内找到了答案:原来explicit是为了防止隐式使用拷贝构造函数的.以下附上从新版MSDN中找到的例子和网上那篇文章:<br />// Copy From MSDN<br />This keyword is a declaration specifier that can only be applied to in-class constructor declarations.原创 2011-05-25 09:44:00 · 271 阅读 · 0 评论 -
memcpy和memmove的区别
<br />区别: 从DESCRIPTION看来,两者的功能基本相同,唯一不同的是,当 dest 和 src 有重叠的时候选用不同的函数可能会造成不同的结果。不妨写个小程序来测一下: 0 #i nclude 1 #i nclude 2 3 int main() 4 { 5 int i = 0; 6 int a[10]; 7 8 for(i; i < 10; i++) 9 { 10 a[i] = i; 11 } 12 13 memcpy(&a[4], a, sizeof(int)*6); 14 15 for(原创 2011-06-02 16:27:00 · 375 阅读 · 0 评论 -
内存布局-大小端模式
<br />我们常常看到“alignment", "endian"之类的字眼, 但很少有C语言教材提到这些概念. 实际上它们是与处理器与内存接口, 编译器类型密切相关的.<br />考虑这样一个例子: 两个异构的CPU进行通信, 定义了这样一个结果来传递消息:<br />struct Message<br />{<br /> short opcode;<br /> char subfield;<br /> long message_length;<br /> char version;<br /> shor原创 2011-05-31 15:56:00 · 659 阅读 · 0 评论 -
C/C++:memmove、memcpy、strcpy三者的区别
memcpy()和memmove()都是C语言中的库函数,在头文件string.h中,其原型分别如下: void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 它们都是从src所指向的内存中复制count个字节到dst所指内存中,并返回dst的值。当源内存区域和目标内存区域无交叉时,两者的结果是一样的,但如果有交叉呢?先看下图原创 2011-06-02 16:50:00 · 363 阅读 · 0 评论 -
树形控件,下拉框,listbox的用法
MFC树控件的简单入门 本文简单介绍了有关MFC中树形控件的最基本的用法,鉴于水平有限,仅希望能够读者通过简单的编程实例,起到对树形控件入门之目的。因为笔者对MFC知识点的学习也都是从实例中学习,这样效率会相对较高,好了不说废话了,开始…1. 新建一名为“转载 2011-10-18 09:57:15 · 3856 阅读 · 1 评论 -
帮 C/C++ 程序员彻底了解链接器
本文旨在帮助 C/C++ 程序员们了解链接器到底完成了些什么工作。多年来,我给许多同事解释过这一原理,因此我觉得是时候把它写下来了,这样不仅可以供更多人学习,也省去我一遍遍讲解。[2009年3月更新,内容包括:增加了 Windows 系统中链接过程可能遇到的特殊问题,以及对某条定义规则的澄清。]促使我写下这篇文章的起因是某次我帮人解决了一个链接错误,具体是这样的:转载 2015-12-18 14:43:49 · 4731 阅读 · 0 评论