C++
xyjnufop
这个作者很懒,什么都没留下…
展开
-
about const in C++
《高质量程序设计指南》5.4节 类中的常量 有时我们希望某些常量只在类中有效。 由于#define 定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用 const 修饰数据成员来实现。const 数据成员的确是存在的,但其含义却不是我们所期望的。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其 const 数据转载 2009-08-23 09:07:00 · 303 阅读 · 0 评论 -
一点C++基本知识
有些知识虽然在开发中不是常用,但是要用到的时候不会就麻烦了。。有些会很偏(因为的用的不多)C++ 中 UNION 联合的概念,一看便清楚#i nclude union{int i;char x[2];}a;void main(){a.x[0] = 10; a.x[1] = 1;printf("%d",a.i);}答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)原创 2009-10-09 23:12:00 · 329 阅读 · 0 评论 -
Windows Socket五种I/O模型(一)——选择模型(Select)
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑转载 2009-10-08 23:03:00 · 501 阅读 · 0 评论 -
WinSock---WSAAsyncSelect IO模式小结
在使用WSAAsyncSelect之前 一般要先自定义一个用户消息,然后在 WSAAsyncSelect 中设定 在socket发生某个事件时,发送指定消息给的某个窗口,然后在这个消息处理函数中处理事件信息,关于事件处理函数中的参数信息(即消息 附带的参数)可以看如何判断通过WSAAsyncSelect 注册的事件中,发生的是那个 WSAAsyncSelect 函数用来请求原创 2009-10-07 23:14:00 · 371 阅读 · 0 评论 -
几个用于线程同步对象的区别
互斥对象和事件对象属于内核对象,利用内核对象进行线程同步,速度较慢,但利用互斥对象和事件对象这样的内核对象,可以在多个进程中的各个线程间进行同步。 关键代码段是工作在用户方式下,同步速度较快,但在使用关键代码段时,很容易进入死锁状态,因为在等待进入关键代码段时无法设定超时值。原创 2009-10-06 11:42:00 · 312 阅读 · 0 评论 -
关键代码段 Critical Section
Critical Section ObjectsA critical section object provides synchronization similar to that provided by a mutex object, except that a critical section can be used only by the threads of a single proc原创 2009-10-06 11:26:00 · 378 阅读 · 0 评论 -
WinSock学习笔记(一)
Socket(套接字)◆先看定义:typedef unsigned int u_int;typedef u_int SOCKET;◆Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接,双方就可以发送和接收数据了。其定义类似于文件句柄的定义。◆Socket有五种不同的类型:1、流式套接字(stream socket)定义:转载 2009-10-06 22:40:00 · 211 阅读 · 0 评论 -
Event对象
Event可用于线程同步。 Event可分为 人工重置和系统重置 两种, 如果是人工重置的event对象,所有等待该Event对象的线程在该event对像 有信号后,所有线程都编译可执行状态,也就是线程的代码可以往下走。如果是系统重置的Event对象,那么所有等待该对象的线程中只有一个线程的代码可以往下走,其余的继续等待该对象。 创建Event对象的原型 H原创 2009-10-06 10:23:00 · 284 阅读 · 0 评论 -
关于C++ 中的static
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答 、全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,原创 2009-10-14 00:21:00 · 359 阅读 · 0 评论 -
进程间通信
每个进程一启动,系统就给进程分配了4G的内存空间,所有线程所需的空间都在这个4G中,进程通信有四种方式剪贴板匿名管道命名管道邮槽剪贴板操作。剪贴板是一块全局的内存,所有的进程都是可以访问它的.剪贴板的数据时延迟提交的。数据复制1.打开剪贴板(OpenClipboard());2.清空剪贴板(当前进程拥有剪贴板) (EmptyClipboard());3.设置剪贴板数据 (S原创 2009-10-13 19:30:00 · 372 阅读 · 0 评论 -
JMP 地址计算
<br /> <br />在某些时候需要在代码中写入JMP指令<br />JMP 二进制 =E9<br />比如我要 JMP到 7777ABCD<br />貌似E9 后跟的是RVA<br />所以<br />目标地址=指令所在地址+指令长度+RVA<br />即如果在 00552df7处 要跳到7777ABCD<br />那么<br />RVA=7777ABCD-00552df7-5=77227DD1<br />即在00552df7处写入E977227DD1原创 2010-08-08 10:45:00 · 4372 阅读 · 0 评论 -
WSAAsyncSelect 和WSAEventSelect的用法
1.WSAAsyncSelect(pThis->m_SockListen, pThis->GetSafeHwnd(), WM_SOCKET, FD_ACCEPT | FD_CLOSE);WSAAsyncSelect 方法 进行socket i/o 需要自定义消息,需要窗口HWND,需要 把感兴趣的I/O事件|起来。 2.WSAEventSelect,虽然不用HWND,但就不是原创 2010-04-24 15:05:00 · 2839 阅读 · 0 评论 -
资源管理器 小结
没用过VC写程序的人,用它写程序真是太累来了,折腾了两天一个简单的资源管理器出炉,虽然辛苦,但还是值得的。小结一下这个程序在界面方面主要用了 CListCtrl和CTreeCtrl,这两个空间用来显示一些目录,文件。两天的时间没白费,把这两个控件使用方式大概弄明白了。现在发现有很框架的思想都是很相像的。 这个东西主要比较麻烦的是 对文件的遍历,和文件属性的操作。 大概用到下面这原创 2009-10-28 01:44:00 · 453 阅读 · 0 评论 -
宽字符处理函数函数与普通函数对照表
宽字符处理函数函数与普通函数对照表 字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph()转载 2009-10-24 01:22:00 · 284 阅读 · 0 评论 -
DLL 注入进程
进程注入有很多方式,其中有一种利用远程线程技术来实现进程的注入。这个方式能实现主要是因为 DLL 动态加载的函数原型和线程函数的原型非常相像,所以这两个函数的指针式可以兼容的。 HMODULE LoadLibrary( LPCTSTR lpFileName);DWORD WINAPI ThreadProc(LPVOID lpParameter);在 调用 HANDLE C原创 2009-10-23 22:10:00 · 803 阅读 · 0 评论 -
rundll32 执行DLL中的某个函数
rundll32 命令可以执行DLL中的某个函数 先写个DLL文件 Mydll.cpp BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ Messag原创 2009-10-25 17:00:00 · 1315 阅读 · 0 评论 -
动态库
这个东西其实没什么好记录的,随便记下吧 Windows操作系统平台:动态链接库:dll类型,静态链接库:lib类型;1、动态库简介:动态链接库可以看成是一种仓库,一种资源的集合:函数,变量,类,资源……都可以由动态链接库来导出。2、动态库与静态库的区别:a、静态库中的代码会直接塞到EXE中,而动态库则可以被EXE动态的加载或卸载;b、静态库中不能再包含其他的动态或静态库,而动原创 2009-10-22 09:32:00 · 621 阅读 · 0 评论 -
一点异步Socket的总结
1. 加载socket库 。。。。可以用AfxSocketInit()2.产生一个socket对象,并绑定到某个IP地址。 m_socket=socket(AF_INET,SOCK_DGRAM,NULL); sockaddr_in bindAddr; bindAddr.sin_family=AF_INET; bindAddr.sin_port=htons(5000)原创 2009-10-06 09:28:00 · 405 阅读 · 0 评论 -
关于多线程API
#include #include using namespace std;DWORD WINAPI ThreadProc1(LPVOID lpParameter);DWORD WINAPI ThreadProc2(LPVOID lpParameter);int index=0;int totleTickts=100;int saledTickts原创 2009-10-05 20:13:00 · 624 阅读 · 0 评论 -
初试 iterator
#include #include using namespace std; void vectoriterator(); void stringiterator(); void constiterator(); void iterator_mathematical_operation();int main() {原创 2009-08-28 17:51:00 · 292 阅读 · 0 评论 -
初试 bitset
bitset 还是和 vector与string 有区别的。首先他就不支持 iterator.内容只能为0,1.(要不怎么能称为bitset). #include #include #include #include using namespace std; void use_bitset();void use_bitset2();原创 2009-08-29 10:29:00 · 248 阅读 · 0 评论 -
CPP 函数调用约定
在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result =function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个转载 2009-08-28 09:32:00 · 374 阅读 · 0 评论 -
初试vector
对泛型这东西一直有点怵。主要是练得的太少。现在软件。。。诶,没想法了。。。别说算法了,很多连个基本的数据结构都看不到。这样的东西真是让人当心。。。。。 公司虽说是由.NET 2.0 (4.0都来了)。。但是那个代码 我看全是1.0的。充斥着for .... if 之类。C#的动态性呢。。。呃,,看不见。。。 今天看CPP Primer 先记下,小练vector 和string原创 2009-08-27 21:43:00 · 277 阅读 · 0 评论 -
string in cpp
string 类型必不可少。 关于string 的一些操作重载。基本上你能想到的操作都实现了。但是唯有一个string S="s"+"f" ; 这个是违法的。因为 "s"和"f"是字面常量,不是string 类型。所以没有办法时这个两个字面常量相加。 下面是对字符串处理常用的一些函数。需要#include原创 2009-08-26 21:44:00 · 506 阅读 · 0 评论 -
reference type in cpp
为什么引用类型一定要在声明的时候初始化呢,要想清楚这个问题应该站在编译器的角度去思考问题。 比如 声明一个引用没有初始化int& r;int b=333;r=b; //你说r=b是赋值 还是 初始化引用呢?? 这里有二义性,编译器解决不了问题,所以提前到CODING的时候明确 掉。 还有一个就是 const 也参与类型的声明。const int a 和原创 2009-08-25 20:45:00 · 301 阅读 · 0 评论 -
变量的初始化
#include using namespace std;class A{public: int xx;};int main(){ A *a=new A(); //堆中分配 coutxx<<endl;//0 A b; //栈中分配 cout<<b.xx<<endl; //乱值 A c原创 2009-08-24 22:21:00 · 297 阅读 · 0 评论 -
输出宽字节字符
wchar_t w=L的; wchar_t arr[8]=L"你好";//针对unicode setlocale(LC_ALL,""); wcout wcout //当一个"AKS"+L"啊开机的发卡机上的" 会是怎么回事呢?原创 2009-08-24 17:38:00 · 453 阅读 · 0 评论 -
CPP 中的一些基本概念
1,指针是数组的迭代器。2,给指赋值的情况: 不能出现如下情况, int a=0; int *p=a; 这个是错误的。首先是他们的数据类型不一致,,其次是因为a的值不能在编译时确定。编译时的错误信息是 “无法将 int 转化为 int*” 但是 const int a=0; int *p=a; 这个就可以编译通过,因为a的值 在编译时原创 2009-08-29 12:23:00 · 454 阅读 · 0 评论 -
C 文件操作
首先,几个函数先介绍一下。fopen fopen(打开文件) 相关函数 open,fclose 表头文件 #include 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。 mode有下列几种形态字符串: r原创 2009-09-06 23:32:00 · 574 阅读 · 0 评论 -
error LNK2001: unresolved external symbol _WinMain@16
VC 6中 老是有这个问题,貌似是 工程类型不对, 入口函数地址找不到,预先设置中的不对 一,问题描述error LNK2001: unresolved external symbol _WinMainᤐdebug/main.exe:fatal error LNK 1120:1 unresolved externals error executing link.exe;二,产生这个问题可原创 2009-10-05 16:10:00 · 403 阅读 · 0 评论 -
基于UDP的SOCKET程序
基于UDP的比较特殊,是无连接的。客户端没有了 connect的过程,直接发送 sendto 服务端没有了 listen和accepct 的过程,直接recvfrom 服务端: #include #include #include using namespace std;void main(){ WORD wVersionRequest原创 2009-10-01 23:19:00 · 402 阅读 · 0 评论 -
基于TCP的socket程序
服务端: #include #include #include using namespace std;void main(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup(原创 2009-10-01 21:46:00 · 326 阅读 · 0 评论 -
如何判断通过WSAAsyncSelect 注册的事件中,发生的是那个
When one of the nominated network events occurs on the specified socket s, the application window hWnd receives message wMsg. The wParam parameter identifies the socket on which a network event has oc原创 2009-10-07 12:37:00 · 443 阅读 · 0 评论 -
WinSock学习笔记(二)
与socket有关的一些函数介绍1、读取当前错误值:每次发生错误时,如果要对具体问题进行处理,那么就应该调用这个函数取得错误代码。 int WSAGetLastError(void ); #define h_errno WSAGetLastError()错误值请自己阅读Winsock2.h。2、将主机的unsigned long值转换为网络字节顺序(3转载 2009-10-06 22:42:00 · 218 阅读 · 0 评论 -
The pointer in C++ /CLI
C++ /CLI 中的指针有好几种1.最终句柄 tracking handle2.内部指针 interior pointer3.固定指针 pinning pointer4.这条也应该加上 ISO-C++ pointer tracking handle Pointer^ p=gcnew Point;array^ a=gcnew array(3)arra原创 2009-09-16 22:43:00 · 436 阅读 · 0 评论 -
怎么不生成 .LIB文件
用VS创建了个Win32空的项目,要做一个dll,一切完了之后发现只生成了dll,没有生成lib,搜了半天才找到,原来要加入.deff的模块定义文件(包含到处函数的东东),加上之后,就生成.lib了原创 2009-09-16 14:51:00 · 1203 阅读 · 0 评论 -
About static menber variable of class
demo1 class Point{public: void output() { init(); } static void init() { x=0; y=0; }private: static int x,y;}; void main(){ Point::init(); /*will have compile error ,because int stat原创 2009-07-04 20:32:00 · 394 阅读 · 0 评论 -
OD断点原理
<br />1,内存读写原理<br /> 内存的读写执行断点是通过修改内存页的保护属性来实现的,<br />2,硬件断点<br />只有4个<br />这个是通过 DR0-DR7这个八个寄存器来实现的<br /> <br />3,普通断点<br />是通过将指令修改为 int 3 来实现的原创 2010-10-20 22:25:00 · 516 阅读 · 0 评论