随笔分类 - [30]C++
-
视角变换及缩放
摘要:用DirectX实现魔方(三)视角变换及缩放(附源码)在本系列第一篇介绍过鼠标按键的功能,如下。左键拖拽 - 旋转魔方右键拖拽 - 变换视角滚轮 - 缩放魔方今天研究一下如何实现后面两个功能,用到的技术主要是Arcball,Arcball是实现Model-View-Camera的重要技术,这里的旋转基于Quaternion(四元数)来实现,当然也可以通过欧拉角来实现,但是欧拉角的旋转不够平滑。先看一下Model-View-Camera的效果,如下,这个gif效果图是用LICEcap录制的,帧率有些慢,略有卡顿现象,大家可以下载文末的可执行文件查看更加平滑的效果。右键拖拽 - 变换视角由上面的动 阅读全文
-
指针数组和数组指针
摘要:【C++】指针数组和数组指针首先的首先,稍微抱怨一下阿里今天的严重失误。说好的晚六点笔试,说好的务必提前半小时到场。六点十五的时候告诉闷在一个大教室里躁动的我们“今天七点半开考,大家先回去吧,七点半再过来”,满脸黑线…等到七点半,嗯,没消息…等到八点,嗯,继续没消息…等到八点半,嗯,还是没消息…约八点四十通知,今天不考了,大家回去吧。。。点点点有木有,三个多小时啊~嗯,淡定,大家都不容易。不过今晚北京的天着实不错,也总算还是有点美好的事物的。((⊙o⊙)…呃,现在应该说是昨天了…)然后的然后,今天科普吧。很简单的问题,关于指针的。用变量a给出下面的定义。(1)一个整型数(An integer) 阅读全文
-
Sublime和Codeblocks支持C++11
摘要:Sublime和Codeblocks支持C++11闲来没事看了一下C++11,比起C++0x多了很多新功能,像auto变量,智能指针等,g++4.7以上版本也提供了对C++11的支持,但是,如何在你的编辑器上执行C++11代码呢?刚开始以为用法和以前的版本一样,于是写了个C++11的小代码:完事后一编译发现不对,于是又手工调用g++编译了一下:g++ -o test2 test2.cpp发现还是不对。百度了一下才发现原来编译C++11不同于C++0x,要加一个编译选项-std=c++11 :g++ -std=c++11 -o test2 test2.cpp编译顺利通过!!!可是,如何将这个编译 阅读全文
-
初识API函数
摘要:初识API函数我之前是一个只会编写数值计算的程序的OIer,但我并不甘于这种现状,于是我编写了我的第一个使用API函数的C++程序,开发平台是VS2012:View Code// ConsoleApplication.cpp : 定义控制台应用程序的入口点。//#include#include"stdafx.h"#includeint _tmain(int argc, _TCHAR* argv[]){HWND wnd;wnd=FindWindowA(NULL,"无标题 - 记事本");SendMessage(wnd,WM_CLOSE,0,0);syste 阅读全文
-
64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )
摘要:64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )【PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码】glhHook = SetWindowsHookEx(WH_SHELL,ShellHookProc, 0 , 0); //改成跟X86下一样的glhHook = SetWindowsHookEx(WH_SHELL,ShellHookProc,glhInstance, 0);2013.09.11代码修改, 可以针对指定的进程进行保护( 编译DLL和测试DEMO的时候,请注意目标平台,X86还是X64)=> 阅读全文
-
C++内存中的封装、继承、多态(上)
摘要:C++内存中的封装、继承、多态(上)继我的上一篇文章:浅谈学习C++时用到的【封装继承多态】三个概念此篇我们从C++对象内存布局和构造过程来具体分析C++中的封装、继承、多态。一、封装模型的内存布局常见类对象的成员可能包含以下元素:内建类型、指针、引用、组合对象、虚函数。另一个角度的分类:数据成员:静态、非静态成员函数:静态、非静态、虚函数1.仅包含内建类型的场合:class T{ int data1; char data2; double data3;};类中的内建类型按照声明的顺序在内存中连续存储,并且分配的大小由内建类型本身的大小决定(依赖机器),布局受... 阅读全文
-
使用STL处理分支限界法处理最优装载问题
摘要:使用STL处理分支限界法处理最优装载问题#include #include #include #include #define MAX_SIZE 100int SIZE;using namespace std;float Object_Weight[MAX_SIZE];float SUM;class Node{public: float total_weight; int level; Node(){ total_weight = 0; level = 0; for(int i=0;i Queue; Node *a =... 阅读全文
-
【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
摘要:【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展公司有个监控程序涉及到进程的保护问题,需要避免用户通过任务管理器结束掉监控进程,这里使用了HOOK技术,通过Hook OperProcess来实现进程的保护.正常的结束进程的流程是(应用层)a.OpenProcess 打开进程,获取进程的句柄.b.将a获取的进程句柄传递给TerminateProcess,最后由TermianteProcess来完成进程的关闭.ps:TerminateProcess又会调用系统的NtTerminateProcess,然后逐步深入内核层,最终调用内核API 阅读全文
-
位运算
摘要:位运算位运算 位运算时把数字用二进制表示之后,对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话,说世界上有10种人,一种人知道二进制,而另一种人不知道二进制。。。。。。 其实二进制的运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移、右移。如下表:与(&)0 & 0 = 01 & 0 = 00 & 1 = 01 & 1 = 1或(|)0 | 0 = 01 | 0 = 10 | 1 = 11 | 1 = 1异或(^) 阅读全文
-
不用char*作为hash_map的key
摘要:尽量不用char*作为hash_map的keyPosted on2013-09-09 21:21Springlie阅读(83) 评论(0)编辑收藏引子:同事前几天用hash_map时发现一些问题。当时的场景是有一些字符串char*,要去对应某种类型的对象。同事的做法是:尝试用char*作为key进行hash。编译通过,但运行时不正常,insert操作可以成功,但find操作基本都失败改用string将原字符串包装后作为key进行hash。编译时不能通过google后,用string作key,并添加了一个template struct hash的仿函数作为hash_map的构造参数。编译通过,运 阅读全文
-
C++ 动态库导出函数名“乱码”及解决
摘要:C++ 动态库导出函数名“乱码”及解决刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都“乱码”了。导出过程如下:新建一个Win32项目:新建的解决方案里有几个导出的示例:// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLLEXPORT_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将// DLLEXPORT_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的// 符号视为是被导出的。#ifdef DL 阅读全文
-
API HOOK库
摘要:API HOOK库API HOOK有两种做法,一种是SetWindowHookEx,简单易用,但如果做其它的HOOK,如HOOK OpenProcess,就需要修改内存地址了,内存地址可以通过WriteProcessMemory来修改,先将调用函数的地址改成自己的(jmp到自己的函数),然后需要时,再改回来。View Code#pragma once#ifdef _M_IX86template class Hooker{protected: static DWORD HookFunction(LPCWSTR lpModule, LPCSTR lpFuncName, PROC lpFunc... 阅读全文
-
内存对齐机制深入剖析
摘要:内存对齐机制深入剖析 在我的博客由底层和逻辑说开去--c++之引用的深入剖析里面提到内存对齐机制,我觉得这个有点意思,但是却不能仅从汇编层面就分析出个所以然来,因此就从inter的cpu 对内存访问路线的角度分析分析。 对于内存对齐 我们可以提出的问题从逻辑层面讲,就是内存对齐有什么意义,从底层来讲就是cpu怎么访问内存; 首先这个内存对齐机制是比较复杂的,百度一下很多人的理解,我发现大多数都和编译器以及c语言控制对齐方式联系起来,使的这个问题看似困难无比。其实我们 都知道,1.编译器又不是标准 2.c语言能更改对齐方式只能说明c语言强大,不能说明cpu按这种方式工作就是好的。嗯,那... 阅读全文
-
opencv 2.46与visual studio 2012 配置方法
摘要:opencv 2.46与visual studio 2012 配置方法一开学就搞实训,还是没学过的图像处理。痛苦啊!图像处理时一般使用Matlab中的图像工具箱,或者是C/C++和OpenCV结合使用。以前看过一些关于opencv的文章,没想到现在要用上了。把搭建开发环境的过程分享一下一、首先假设已经安装了Visual studio 2012 。然后下载opencv 2.46,点击exe解压文件到指定的目录。我的在”E:\Program Files\opencv"目录下。然后添加环境变量PATH1 E:\Program Files\opencv\build\x86\vc11\bin; 阅读全文
-
关于继承和多态
摘要:对象模型学习总结 (二) . 关于继承和多态前言 接着上文,现在谈一谈继承和多态。本来是想把继承和多态分开成两篇文章来写的。但是一想,多态的实现离不开继承。索性,把这两个面向对象比较重要的特性放在一起讲了。So,这篇文章会很长很长。OK,闲话少扯,进入正题。关于继承 先看一段来自官方对继承的解释。 继承(Inheritance)是指子类(subclass)继承超类型(superclass),会自动取得超类型除私有特质外的全部特质,同一类型的所有实例都会自动有该类型的全部特质,做到代码再用(reuse)。C++只支持类型构成式继承,虽然同一类型的所有实例都有该类型的全部特质,但是实例能... 阅读全文
-
网络爬虫的C++程序
摘要:[搜片神器]之DHT网络爬虫的C++程序初步开源回应大家的要求,特地整理了一开始自己整合的代码,这样最简单,最直接的可以分析流程,至于文章里面提供的程序界面更多,需要大家自己开发。谢谢园子朋友的支持,已经找到个VPS进行测试,国外的服务器:h31bt.com大家可以给提点意见...服务器在抓取和处理同时进行,所以访问速度慢是有些的,特别是搜索速度通过SQL的like来查询慢,正在通过分词改进中。。http://h31bt.com:666/采用了hubbledotnet框架分词 来加快搜索速度,后面会用此来代替h31bt.com的网站。DHT抓取程序开源地址:https://github.com 阅读全文
-
使用C++做算法时,对内存的管理的办法
摘要:使用C++做算法时,对内存的管理的办法最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了。1. 需求在做线性代数的算法时,首要的就实现Matrix这个类。由于Matrix的行列可变化,所以必须使用动态的内存分配。动态的内存分配就必须要考虑内存的申请和释放,以及动态内存在不同对象之间的传递机制。考虑到算法的复杂性,所以在Matrix之外不打算使用指针,以降低算法实现的复杂度。2. 可实现的方法总体上,我能找到的方法有以下2种。利用默认的构造复制构造函数和默认重载以及赋值操作函数动态申请和释放内存和引用计数机制实现不同对象之间对同一块内存的共享,最后只有一个对 阅读全文
-
C++学习笔记
摘要:C++学习笔记(原创)Posted on2013-08-29 20:52maowang1991阅读(102) 评论(10)编辑收藏以下内容为自己一年多的C++学习心得,纯原创,转载请注明源地址。一年多的C++学习过程中,自己阅读了很多C++经典著作,有《effective c++》,《more effective c++》,《c++ primer》等,每次阅读著作都会总结一些心得,现在拿出来和大家分享一下。1.struct成员默认访问方式是public,而 class默认访问方式是private!2.exit函数终止程序执行会调用析构函数 ,abort函数终止程序不会调用析构函数!3.静态局部 阅读全文
-
简单的内存监视实现
摘要:简单的内存监视实现前言: 前段时间学习了API HOOK,对这技术也略知一二,决定利用这技术实现个小功能。以前有用过某工具,可以偷取别人外挂的功能地址,当时想想觉得挺不可思议的,如今了解API HOOK后,觉得这功能也就那样。废话不多说,进入正题。一、HOOK WriteProcessMemory首先看看WriteProcessMemory()原型:BOOL WriteProcessMemory( HANDLEhProcess, // handle to process LPVOIDlpBaseAddress, // base of memory area LPVOIDlpBuffer, /. 阅读全文
-
C++11改进我们的程序之简化我们的程序1
摘要:C++11改进我们的程序之简化我们的程序(一)C++11在很多方面可以简化我们的程序开发,我会在“简化我们的程序”这一系列的博文中一一讲到,敬请关注。这次要讲的是:C++11如何通过获取函数模板的返回值类型来简化我们的程序。在谈到简化之前,我们先看一个问题,这个问题也是我前段时间在开发C++版本的linq时遇到的。假设我们现在需要将集合按某种属性分组,就是类似于sql语句中的group by,我们知道group by后面的字段会组成一个唯一的键,得到的结果是按照这个唯一键值的分组。关于group by具体看一个例子就清楚了。struct Person{string name;int age;s 阅读全文