自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 变量、内存属性、作用域、生命期

一 内存分布 w- 写 r - 读 e - 执行 s-共享1.1.同个程序同时运行多个实例,它们之间的内存是相互隔离的,同一个变量的值互补干扰。1.2.早前微软对内存中数据的属性:e - 执行不做检查,内存中能访问到的数据都可以作为代码来执行,这样其实可以在很多地方去构造想要执行的代码,通过修改函数的返回地址,或者修改程序中的跳转,将执行地址定位到构造好的位置,从而实现了内存

2017-03-08 15:55:27 272

原创 笔记:数组

1 数组: 1.1.数组只能在定义的时候赋予初值 //正确例子int arryA[6] = {1, 2, 3, 4, 5, 6};int arryB[2][3] = {{1, 2, 3}, {4, 5, 6}};int GetValue();int nValue = 5;int arryC[6] = {1, GetValue(), 3, 4, nValue++, 6};//错误例子:i

2017-03-06 23:24:14 302

原创 线程消息+HOOK+皮肤

1.线程的消息通讯SendMessage 》》向窗口派发PostMessage 》》向窗口派发.向线程发消息:PostThreadMessage() 不是每个线程都能拥有消息队列, windows系统中,必须是UI线程,才能从系统中分配到一个属于线程自己的消息队列, 如果在线程回调函数中使用到了以下两个API,系统会认定该线程是一个UI线程: GetMessage(); CreateWi

2016-12-28 20:50:18 490

原创 C库函数多线程

CreateThread()_beginThread();// #include <process.h>// Setting->Code Generate -> use run-time library:// 跨平台,某些参数需要根据特定平台进行类型强制转换线程局部存储TLS(Thread Local Storage) /MTd /MT /MSVCRTD.DLL /MSVCRT.DLL

2016-12-28 15:51:30 362

原创 unresolved external symbol _WinMain@16

MFC在工程里把_MBCS改为UNICODE出现: msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 Debug/Key.exe : fatal error LNK1120: 1 unresolved externals解决办法: Project->Settings->Link->C

2016-12-26 00:41:00 343

原创 多线程-事件

CreateEvent(//SD//(=TRUE 手动上锁),(=FALSE 自动上锁)//事件的初始状态,TRUE表示锁是开的状态//事件名)OpenEvent(权限名字)//防止多开办法之一if(OpenEvent() == NULL){ //系统没有该实例在运行,创建进程}else{ return;//表示已经有实例在运行,不再创建,直接退出}//主线程通知

2016-12-23 18:49:43 540

原创 多线程之二

同步 msdn查Synchronization Functions 不同线程共享同一个资源,在线程切换过程中,会产生不可预料的结果 用户方式同步 3环态 锁 InterLockxxxxxx互锁函数向总线发送一个硬件信号,防止另一个cpu访问同一个内存地址//循环锁//InterlockedExchange//利用InterlockedExchange实现上锁: bool i

2016-12-23 12:49:18 222

原创 多线程之一

线程状态:运行态就绪态阻塞态多线程:主线程处理界面,消息循环创建子线程去执行非界面非消息循环,特别是一些耗时的任务相关API 创建线程 CreateThread退出线程 ExitThread挂起线程 SuspenedTread恢复线程 ResumeThread终止线程 TerminateThread获取当前进程句柄 GetCurrentThread获取线程退出码 GetE

2016-12-22 15:59:50 274

原创 文件内存映射 DLL共享 WM_COPYDATA

进程之间通讯的手法: - WM_COPYDATA - 共享DLL - 内存映射 - socket - 管道 - 邮件槽 1 WM_COPYDATA 有两份数据拷贝:第一次发送到操作系统高2GB共享区,然后再拷贝到目标进程的地址空间,适用于数据量不大的场合//COPYDATASTRUCT原型typedef struct tagCOPYDATASTRUCT { ULONG_

2016-12-21 01:24:46 926

原创 进程间的通讯

两个独立的进程之间,都具有4GB的虚拟内存空间 它们之间的通讯可以通过以下办法 1.两个进程之间相互发生消息,达到通讯目的,携带的信息很有限#define WM_MYMSG WM_USER + 1 //自定义消息码HWND hWnd = ::FindWindow(NULL, "目标程序窗口名");::PostMessage(hWnd, WM_MYMSG, (WPARAM)1, (LPARAM

2016-12-20 00:19:34 282

原创 进程内存数据的操作

//读进程内存数据BOOL ReadProcessMemory( HANDLE hProcess, // handle to the process LPCVOID lpBaseAddress, // base of memory area LPVOID lpBuffer, // data buffer SIZE

2016-12-19 23:07:31 447

原创 获取线程句柄的三种方法

获取线程句柄的三种方法 1.通过进程的PID并调用API函数:HANDLE OpenProcess( DWORD dwDesiredAccess, // access flag BOOL bInheritHandle, // handle inheritance option DWORD dwProcessId //

2016-12-19 18:52:58 8134

原创 MFC-菜单的动态(增加 插入 删除 响应)

增加菜单int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ CMenu menu; menu.CreateMenu();//新建菜单 menu.AppendMenu(MF_STRING, 101, "刷新");//新建子菜单的菜单项1 menu.AppendMenu(MF_STRING, 102, "复制");//新建

2016-12-17 17:27:32 4512 1

原创 MFC-右键快捷菜单步骤

1.在VC++中创建一个菜单(ID_MENU1),用于快捷菜单 2.在CXXXView中通过ClassWizard 建立WM_RBUTTONDOWN消息相应函数 3.在响应函数中实现右击弹出快捷菜单的代码void CXXXView::OnRButtonDown(UINT nFlags, CPoint point) { CRect rect; GetClientRect(rect);

2016-12-17 16:29:07 1065

原创 MFC消息路由

消息分类: 1.标准消息(WM_XXX ,不包括WM_COMMAND) 2.命令消息(菜单消息,快捷键消息,工具栏按钮消息) 3.通告消息(由控件产生的消息)

2016-12-17 16:14:53 229

原创 进程基础知识

1.WinExec https://msdn.microsoft.com/zh-cn/library/windows/desktop/cc144191(v=vs.85).aspxUINT WinExec( LPCSTR lpCmdLine, // command line UINT uCmdShow // window style);WinExec("control.exe

2016-12-16 17:06:40 252

原创 MFC DLL

其他:DLL劫持防范:可以采用数字签名,通过计算DLL文件的数字签名,在加在时候进行验证即可。Regular DLL:凡是支持DLL技术的都可以使用,不限于MFC程序使用。Exten DLL:MFC DLL的扩展,用来导出MFC类,一般仅在MFC中使用。条件宏:AFX_EXT_CLASS#ifndef AFX_EXT_DATA #ifdef _AFXEXT #define

2016-12-16 15:33:20 221

原创 静态库和动态库

64位系统:SYSWOW64文件夹存放了32位的DLL库,但是在64位系统测试DLL的查找路径时候,可能会得到DLL的文件夹位置还是system32(这里面是系统做了某种重定向)64位系统的64位DLL文件存放的文件夹是system32void outputDllPathchar szBuf[MAXBYTE] = 0;DWORD dwRet = GetModuleFileName(NU

2016-12-14 18:28:16 196

原创 SDK学习笔记-Windows消息机制

推荐:《Windows 消息机制浅析》 http://www.cnblogs.com/skyofbitbit/p/3649104.htmlSendMessage和PostMessage的区别?SendMessage发送的消息不进入消息队列吗?PostMessage(WM_QUIT)和PostQuitMessage()的区别,可能会产生怎样的差异化执行效果?GetMessage 的返回值在什

2016-12-04 00:16:39 444

原创 SDK学习笔记-GetClientRect与GetWindowRect区别

RECT rc1, rc2; GetClientRect(hWnd,&rc1); GetWindowRect(hWnd,&rc2);参考文档: http://www.cnblogs.com/yongtaiyu/archive/2011/05/18/2049554.html

2016-12-03 22:21:24 341

原创 SDK学习笔记2-一个Win32窗口程序实现过程

Win32程序实现的步骤: WinMain函数的定义创建一个窗口 1. 设计一个窗口类 2. 注册窗口类 3. 创建窗口 4. 显示及刷新窗口进行消息循环完成回调函数//WinMain函数的定义 int WINAPI WinMain( HINSTANCE hInstance, //当前实例句柄 HINSTANCE hPrevInsta

2016-12-03 21:33:46 595

原创 SDK学习笔记-WinMain()

在Windows应用程序中main()被WinMain()取代#define APIENTRY WINAPIint APIENTRY WinMain(HINSTANCE hInstance, //当前实例句柄 HINSTANCE hPrevInstance, //上一个实例句柄 LPSTR lpCmdLine,//

2016-12-03 20:51:13 321

原创 异常

异常的语法问题class student{public: student() { // new可能失败,这个时候throw就开始复杂了 //多次申请,可能最后一次失败。 } ~student() { }//析构抛异常,系统默认接收并给出默认处理,所以析构不throw}main(){ try { int n = 0;

2016-11-01 16:57:02 168

原创 C++习题

用宏模拟模板实现main函数中的代码void main(){ ADD(int)(1,2); ADD(float)(1.0f,2.2f); ADD(int)(10,20); ADD(char*)("hello","wolrd");}#define

2016-10-31 15:56:32 312

原创 1028 C++ 泛型编程

泛型编程所谓的泛型编程,即参数类型化,C++的实现是采用模板实现。 ps:有可能遇到VC6++能编译通过的模板,可能VC++2013通不过 编译器不一定支持所有标准文档。写模板尽量精炼 1.先看下重载的函数:int Add(int a, int b){ return a + b;}float Add(float a, float b){ return a + b;}

2016-10-28 10:50:05 221

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除