• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






C++是神码东东。。。

Nothing to Say
 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | | 订阅 订阅 | 管理

随笔分类 -  C++

1 2 下一页

 
MFC下调用控制台和控制台下MFC库的支持
摘要:1.MFC下调用控制台在CWinApp的InitInstance中对话框的DoModal之前加入1 AllocConsole(); // 开辟控制台2 SetConsoleTitle(_T("测试窗口")); // 设置控制台窗口标题3 freopen("CONOUT$","w",stdout); // 重定向输出4 freopen( "CONIN$", "r+t", stdin ); // 申请读在CWinApp的Exit... 阅读全文
posted @ 2013-06-25 00:15 凨丶 阅读(6654) 评论(0) 推荐(0)
EXE文件格式判断
摘要:可能很多的人都没有注意到一些事情,就是你的程序是不是合法的可运行的应用程序,例如一个文件只是把后缀改成 .exe 的形式就显示为应用程序的图标了! 你不想写一个根据后缀名就确定应用程序类型的程序吧!这样太哪个了吧!解决方法就是根据PE文件格式来解释。关于PE文件格式的资料现在网上汗牛充栋,这里我就不再解释,有兴趣的朋友可以上网查阅PE文件格式资料。我就简单的用代码去演示如何判断PE文件合法,主要就是两个地方,头为"MZ"签名,跟着DOS头部的就是"PE"签名,任何标准的PE文件都会包含这两个签名。如下这段代码所示,这是一个判断是否为合法PE文件的API。 阅读全文
posted @ 2012-11-15 14:32 凨丶 阅读(1473) 评论(0) 推荐(0)
回调函数CALLBACK
摘要:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。1 函数指针回调在C语言中是通过函数指针来实现的,通过将回调函数的地址传给被调函数从而实现回调。因此,要实现回调,必须首先定义函数指针,请看下面的例子:void Func(char *s);// 函数原型void (*pFunc) (char *);//函数指针可以看出,函数的定义和函数指针的定义非常类似。一般的化,为了简化函数.. 阅读全文
posted @ 2012-11-07 10:55 凨丶 阅读(1699) 评论(0) 推荐(0)
堆和栈的区别(转载)
摘要:首先,我们举一个例子:voidf(){int*p=newint[5];}这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小,然后调用operatornew分配内存,然后返回这块内存的首地址,放入栈中,他在VC6下的汇编代码如下:00401028push14h0040102Acalloperatornew(00401060)0040102Faddesp,400401032movdwordptr[ebp-8],eax004010 阅读全文
posted @ 2012-11-06 19:55 凨丶 阅读(317) 评论(0) 推荐(1)
VC++ DEGUG/RELEASE两选项主要有哪些区别 .(转)
摘要:一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)Debug 版本:/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)/Od 阅读全文
posted @ 2012-10-26 09:24 凨丶 阅读(993) 评论(0) 推荐(0)
结构体对齐的具体含义(#pragma pack)(转) .
摘要:朋友帖了如下一段代码: #pragma pack(4) class TestB { public: int aa; char a; short b; char c; }; int nSize = sizeof(TestB); 这里nSize结果为12,在预料之中。 现在去掉第一个成员变量为如下代码: #pragma pack(4) class TestC { public: char a; short b; char c; }; int nSize = sizeof(TestC); 按照正常的填充方式nSize的结果应该是... 阅读全文
posted @ 2012-10-25 11:07 凨丶 阅读(441) 评论(1) 推荐(0)
#pragma指令的使用(转)
摘要:在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!一. message 参数。 message 它能够在编译信息输出窗 口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message(“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定 阅读全文
posted @ 2012-10-25 11:05 凨丶 阅读(263) 评论(0) 推荐(0)
随机数(转)
摘要:多样化是生活的一大乐趣,而计算机却似乎完全是可预见的,因此显得较死板,随机数为计算机程序注入了不可预见的东西,因此可以让计算机更好地模拟外部事件。比如游戏,图形显示,计算机仿真,随机数增加了许多的乐趣,而且当计算机程序重复运行时,不会表现出跟它模仿的自然系统有什么不同之处。我们打算设计一个class Random, 它的成员函数生成和返回各种各样的随机数。将要生成随机数的思想是,从一个数出发,对它进行一系列的算术运算,产生一个与开始那个数没有明显的关系的一个数。因此通过这种方法产生的数实际上一点也不随机,因为每一个数都依赖于它之前的一个数,而且这种依赖是固定的。我们应该更确切地叫它伪随机数(p 阅读全文
posted @ 2012-09-26 16:56 凨丶 阅读(572) 评论(0) 推荐(0)
中文错误信息的显示:GetLastErro的使用
摘要:1 string GetErroMessage(DWORD dwError) 2 { 3 HLOCAL hLocal; 4 hLocal=NULL; 5 BOOL bFun; 6 HMODULE hDll=LoadLibraryEx(TEXT("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES); 7 bFun=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,dwError,MAKELANGID(LANG_... 阅读全文
posted @ 2012-09-14 17:05 凨丶 阅读(559) 评论(0) 推荐(0)
程序自删除代码
摘要:1 BOOL DeleteSelf() 2 { 3 TCHAR szModule [MAX_PATH]; 4 TCHAR szComspec[MAX_PATH]; 5 TCHAR szParams [MAX_PATH]; 6 7 // get file path names: 8 if((GetModuleFileName(0,szModule,MAX_PATH)!=0) && 9 (GetShortPathName(szModule,szModule,MAX_PATH)!=0) && 10 (GetEnvironmentVariable("COM.. 阅读全文
posted @ 2012-09-03 15:30 凨丶 阅读(604) 评论(0) 推荐(0)
GetLastError演示
摘要:VS中添加监视$err,hr可以查询到错误码和对应的解释。也可以查看 winerror.h方法1. 1 ListBox.ResetContent();//清空CListBox 2 3 LPVOID lpMsgBuf; 4 5 for (int i=0;i<1000;i++) 6 7 { 8 9 DWORD dw =i; //在预测有错误的地方加上dw=GetLastError10 11 FormatMessage(12 13 FORMAT_MESSAGE_ALLOCATE_BUFFER |14 15 ... 阅读全文
posted @ 2012-08-29 20:18 凨丶 阅读(378) 评论(0) 推荐(0)
_stdcall和_cdecl
摘要:__cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的函数在返回后清除,使用的指令是 retnX,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。称为自动清栈.. 阅读全文
posted @ 2012-08-29 15:50 凨丶 阅读(291) 评论(0) 推荐(0)
开机启动
摘要:C++ (MFC)开机自启动源码(修改注册表) 分类: 2010-01-14 10:28 287人阅读 评论(0) 收藏 举报 CString str; //添加注册表路径 //WCHAR* CurrentPath=(WCHAR*)malloc(sizeof(char)*100);//程序当前路径WCHAR* CurrentPath= new WCHAR[sizeof(WCHAR)*100];//程序当前路径HKEY hRegKey; //注册keyBOOL bResult; //打开注册表返回值str=_T("Software//Microsoft//Windows//Curren 阅读全文
posted @ 2012-08-23 16:44 凨丶 阅读(401) 评论(0) 推荐(0)
内存文件映射
摘要:服务器端:HANDLE m_handle;CString m_file;char* m_str;1.m_handle=CreateFileMapping(INVALID_HANDLE_VALUE,//创建共享内存NULL,//默认安全属性PAGE_READWRITE,//可读写0,//最大对象空间BUFSIZ,//缓冲大小m_file);//映射对象名2.//将共享内存映射到服务器地址空间的视图m_str=(char *)::MapViewOfFile(m_handle,FILE_MAP_ALL_ACCESS,0,0,BUFSIZ);//通过系统的管理而将文件映射对象的全部或部分映射到进程地址 阅读全文
posted @ 2012-08-23 16:43 凨丶 阅读(244) 评论(0) 推荐(0)
堆栈的区别
摘要:堆和栈的区别一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 4、文字常量区 — 常量字符串就... 阅读全文
posted @ 2012-07-17 17:24 凨丶 阅读(296) 评论(0) 推荐(0)
c++实现双链表
摘要:// Double_List.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <fstream>#include "conio.h"using namespace std;struct _DOUBLE_LINK_NODE //定义一个双链表结构{ char * data; struct _DOUBLE_LINK_NODE* prev; //双链表的前驱 struct 阅读全文
posted @ 2012-07-17 17:24 凨丶 阅读(1719) 评论(0) 推荐(0)
shell_3
摘要:提供 SE_ERR_XXX 之类的错误代码是为了兼容 ShellExecute。使用 GetLastError可以获得更详细的错误信息。返回值可以使下列之一:ErrorDescriptionERROR_FILE_NOT_FOUND指定文件不存在ERROR_PATH_NOT_FOUND指定路径不存在ERROR_DDE_FAIL动态数据交换 (DDE) 处理失败ERROR_NO_ASSOCIATION没有与制定文件名扩展对应的应用程序ERROR_ACCESS_DENIED访问指定文件被拒绝ERROR_DLL_NOT_FOUND无法找到运行应用程序所必须的库文件ERROR_CANCELLED这个函数 阅读全文
posted @ 2012-07-17 17:21 凨丶 阅读(389) 评论(0) 推荐(0)
shell_2
摘要:LPCTSTR lpFile;LPCTSTR lpParameters;LPCTSTR lpDirectory;int nShow;HINSTANCE hInstApp;LPVOID lpIDList;LPCTSTR lpClass;HKEY hkeyClass;DWORD dwHotKey;union {HANDLE hIcon;HANDLE hMonitor;} DUMMYUNIONNAME;HANDLE hProcess; } SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO; 在C#中其结构为 public struct SHELLEXECUTEINFO // 阅读全文
posted @ 2012-07-17 17:20 凨丶 阅读(404) 评论(0) 推荐(0)
shell_1
摘要:okadler0518的专栏精创之作《雷神的微软平台安全宝典》诚邀译者 移动业界领袖会议·上海·6.20 第四届云计算大会门票抢购:史上最低价,每日限5张! 【分享季1】:网友推荐130个经典资源,分享再赠分! SHELLEXECUTEINFO 和 ShellExecuteEx的使用分类: 2009-08-04 09:48 1122人阅读 评论(0) 收藏 举报 SHELLEXECUTEINFO 和 ShellExecuteEx的使用 在日常工作中用到的一些知识,很久没有总结过,前几日参加一个会议,很是无聊。自己思索着自己这两年来所做过的东西,写着写着居然也写下了 100 阅读全文
posted @ 2012-07-17 17:19 凨丶 阅读(166) 评论(0) 推荐(0)
内核对象
摘要:无论怎样创建内核对象,都要向系统指明将通过调用C l o s e H a n d l e 来结束对该对象的操作:BOOL CloseHandle(HANDLE hobj);该函数首先检查调用进程的句柄表,以确保传递给它的索引(句柄)用于标识一个进程实际上无权访问的对象。如果该索引是有效的,那么系统就可 以获得内核对象的数据结构的地址,并可确定该结构中的使用计数的数据成员。如果使用计数是0 ,该内核便从内存中撤消该内核对象。如果将一个无效句柄传递给C l o s e H a n d l e ,将会出现两种情况之一。如果进程运行正常,C l o s e H a n d l e 返回FA L S E 阅读全文
posted @ 2012-07-17 17:13 凨丶 阅读(187) 评论(0) 推荐(0)
 

1 2 下一页