
C++
liuwons
混,也是一种追求
展开
-
初学C++:继承与内嵌类
对书本上继承与派生部分的描述一直看得不是很明白,做个小实验,增进理解:#includeusing namespace std;class A{ protected: //这里本来是private int m; public: A(int x); int get();};class Test:public A{ private: int a;原创 2012-06-09 19:14:36 · 21270 阅读 · 0 评论 -
Windows下获取逻辑cpu数量和cpu核数量
代码可在Windows NT下正常运行具体API说明请参照如下文档:GetLogicalProcessorInformation点击打开链接点击打开链接点击打开链接typedef BOOL (WINAPI *LPFN_GLPI)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD);DWORD CountSet原创 2014-03-26 18:47:14 · 30808 阅读 · 0 评论 -
Windows中openProcess函数返回ERROR_ACCESS_DENIED的解决方法
主要是权限不足引起的。需要提升程序的权限。具体提升方式参照以下文章:Windows程序权限提升原创 2014-05-21 11:12:44 · 26386 阅读 · 0 评论 -
为编写的Windows程序提升权限
1.要求以管理员身份运行 在vs工程属性中,Linker ---> Manifest File---> UAC Execution Level,选择requireAdministrator (/level='requireAdministrator')选项 2.在main函数开始时运行以下函数代码:BOOL WINAPI EnablePriv原创 2014-05-21 11:09:27 · 24959 阅读 · 0 评论 -
Windows下通过写注册表的方式实现程序开机自启动
程序可以读取同目录下的config.ini文件中的配置来实现开机自启动。config.ini文件地格式实例如下:[Main]KeyName = testProcessPath = D:\bin\test.exe其中KeyName字段为写入注册表的表项名称(可以设置为程序名)ProcessPath为程序的完整路径程序的完整源代码如下。regedit原创 2014-05-23 12:32:10 · 22825 阅读 · 0 评论 -
Windows进程间互斥锁
Windows的互斥锁Mutex是可以在进程间使用的。 CreateMutex时可以指定一个mutex名称,此名称可以被其他进程或线程使用。CreateMutex的第二个参数BOOL bInitialOwner表示在创建后是不是立刻获取此锁,相当于立即WaitForSingleObject。 OpenMutex打开一个已经创建了的mutex。 WaitForSingl原创 2014-06-10 17:12:33 · 29937 阅读 · 0 评论 -
YUV与RGB的相互转换
YUV到RGB:int C = Y - 16;int D = U - 128;int E = V - 128;int R = 298 * C + 409 * E + 128;int G = 298 * C - 100 * D - 208 * E + 128;int B = 298 * C + 516 * D + 128;RGB到YUV:原创 2014-05-30 20:07:53 · 20451 阅读 · 1 评论 -
ffmpeg实时编码解码部分代码
程序分为编码端和解码端,两端通过tcp socket通信,编码端一边编码一边将编码后的数据发送给解码端,解码端一边接收数据一边将解码得到的帧显示出来。代码中的编码端编码的是实时屏幕截图。代码调用了Qt SDK。#ifndef MAPTHREAD_H#define MAPTHREAD_H#include #include #include #include #include原创 2014-05-31 23:17:29 · 31490 阅读 · 4 评论 -
python通过swig调用c++dll时指针的用法
当Python和C++的接口涉及到缓冲区时,可以在Python中创建缓冲区,再将缓冲区的指针传给C++函数(通过创建额外的函数进行转换)。实例如下:Python端:1.获取str表示的二进制数据(读取文件等)。2.利用ctypes包中的create_string_buffer(str)函数创建缓冲区。3.获取int表示的缓冲区地址,利用addressof(buf)函数,bu原创 2014-11-13 17:53:02 · 22634 阅读 · 1 评论 -
ffmpeg解码文件
只贴出部分代码,重在说明过程av_register_all();AVFormatContext* fctx = avformat_alloc_context();int err = avformat_open_input(&fctx, "b.avi", NULL, NULL);printf("open input:%d\n", err);err = avformat_fi原创 2014-12-01 13:29:32 · 19701 阅读 · 0 评论 -
ffmpeg解码内存缓冲区
只贴出部分代码,重在说明过程。与解码文件的大致过程类似,只不过自定义了AVFormatContextstruct IOData { char* data; size_t len; };int FrVideoAcqHT::io_get_data(void *opaque, uint8_t *buf, int buf_size){原创 2014-12-01 13:30:55 · 35063 阅读 · 5 评论 -
YV12转opencv IplImage
void Yv12ToImg(uchar *pin, IplImage* img) { uchar y, cb, cr; int ySize = img->width * img->height; int uSize = ySize / 4; uchar *pY = pin; uchar *pU = pY原创 2015-01-08 16:45:17 · 20436 阅读 · 0 评论 -
用WindowsAPI截屏并转换为RGB格式
在Windows下捕获屏幕图像可以有多重方法,比较简单可以调用第三方库,如Qt的屏幕截屏API就很容易调用。在这里介绍如何用Windows API实现截屏并转换成RGB格式存储。#include //最终f的内存布局为BGRA格式,需要保证buf长度足够(>w*h*4)void ScreenCap(void* buf, int* w, int* h){ HWND h原创 2015-05-13 09:06:43 · 23438 阅读 · 0 评论 -
Windows下python使用SWIG调用C++ dll
有一dll和对应的lib文件,含有以下函数:test.hclass Test{private: int a; int b;public: int r; Test(int, int); int add(); int getV(Test*);}; 则可以编写对应的.i文件:test.i%module test%{#define SWIG_FILE_W原创 2014-04-22 12:59:20 · 23533 阅读 · 2 评论 -
关于编译后dll中的函数名
msvc在编译dll时,如果函数声明采用__declspec(dllexport) int add(int,int)的形式,dll中的函数名会是?add@@YAHHH@Z这种形式的。 如果使用如下这种声明,dll中的函数名才会和C++中的函数名一致,为add。extern "C"{DLLTEST_API int add(int, int);}原创 2014-04-18 10:23:34 · 20178 阅读 · 0 评论 -
C++中的const
声明对象时可以用const进行修饰,称为常对象。常对象的数据成员值在对象的整个生存期间内不能被改变。常对象必须进行初始化,而且不能更新。 还可以用const修饰类成员,如下: 1.常成员函数 使用const关键字修饰的函数为常成员函数,常成员函数声明的格式为: 类型说明符 函数名(参数表) const ; const是函数类型的一个组原创 2012-06-09 15:08:08 · 19084 阅读 · 0 评论 -
C++继承:同名隐藏、覆盖,虚函数
不同作用域声明的标识符的可见性原则: 如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见,如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。 在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互包含的两个层原创 2012-06-10 16:12:12 · 29961 阅读 · 0 评论 -
C++中的explicit关键字
explicit用来防止由构造函数定义的隐式转换。 隐式转换:可以由单个实参来调用的构造函数定义了一个从形参类型到该类类型的隐式转换。 例如: #includeusing namespace std;class Test{ private: int a; int b; public: Test(int x){ a=x; } in原创 2012-06-10 01:31:43 · 19825 阅读 · 3 评论 -
C++:成员函数实现在类定义中与在类定义外的区别
在上篇文章《inline的另一用处》中,提到函数实现在类定义中与类定义外的区别。 现在先看个实验: a.cpp: #ifndef TEST_H#define TEST_Hclass A{ public: int fun(int x){ return (x*x+1000);}};#endifvoid tt(){}原创 2012-06-11 10:06:05 · 37601 阅读 · 4 评论 -
C++中内联函数inline的另一作用
内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。 今天在coding时遇到多次定义一个函数而使ld返回错误的情况。大致过程如下: 首先,在一个头文件中定义了一个类及其实现: test.h:#ifndef TEST_H#define TEST_Hclass A{ public: void fun();};void A::fun(原创 2012-06-11 03:00:42 · 21215 阅读 · 5 评论 -
Android实现远程控制PC(Android[客户端]+Qt[服务器端])
由于本人没有无线路由器,因此用Win7自带的虚拟wifi让手机上网:Win7虚拟wifi 但是,电脑不在我的房间,因此每天晚上在床上玩完手机还要下床去关电脑,让很懒很懒的本人很不爽,因此自己尝试着做了一个远程控制。 软件客户端运行在Android设备上(我的手机是Android的),服务器端运行在我的Win7本本上。客户端用的是Android平台应用编程,服务器端用的是Qt编写原创 2012-07-24 15:39:45 · 30132 阅读 · 10 评论 -
引用类型--来自C++的扩展
很久没用C,今天复习了下数据结构,用gcc编译,结果出现一堆错误,几乎都是由引用类型引起的,查阅了下资料,才知道C是没有引用类型的,引用类型是来自C++的扩展的。 引用类型相当于是变量的别名,可以利用此别名指向特定变量,引用不会在内存中占用储存变量值的空间。 引用类型不是指针,指针是变量在内存中的地址,而引用只是其它变量的别名而已。原创 2012-09-25 22:59:01 · 18682 阅读 · 0 评论 -
gnu/gcc目录结构
头文件目录: gnuroot/include gnuroot/lib/gcc/mingw32/4.6.2/include原创 2012-11-13 23:17:21 · 19674 阅读 · 0 评论 -
顺序表实现
sqlist.h#ifndef SQLIST#define SQLIST#define NOT_FOUND -1#define ERROR_LIST_FULL -2#define ERROR_LIST_OVERSTEP -3#define ERROR_LIST_ILLEGALNUM -4#define null原创 2012-11-16 22:28:00 · 18927 阅读 · 0 评论 -
C++中的指针与引用
C++中在函数未被调用时,函数的形参并不占有实际的内存空间,也没有实际的值。只有函数被调用时才为形参分配存储单元,并将实参与形参相结合。每个实参都是一个表达式,其类型必须与形参相符。函数的参数传递指得就是形参与实参结合的过程,形参与实参结合的方式有值传递和引用传递。 值传递是指当发生函数调用时,给形参分配内存空间,并用实参来初始化形参(直接将实参的值传递给形参)。这一过程是参数值的单向传递原创 2012-12-05 18:25:26 · 18793 阅读 · 0 评论 -
const指针与指向const对象的指针
1.const指针是一种指针,此指针指向的地址是不能够改变的,但是其指向的对象是可以被修改的,其定义类似: int* const p=地址; 比如下面的代码:int b=12;int* const a=&b;void tes(){ *a=1;} 此代码是正确的,先声明了变量b,然后声明一个const指针a,此指针指向变量b,在tes函数中修改指针a所指向的原创 2013-01-22 17:54:54 · 23458 阅读 · 0 评论 -
oracle odbc连接字符串(不配置odbc数据源)
利用odbc连接oracle的最简单的方式是通过配置数据源的方式连接,但每次连接到一个新的Server都需要添加一个数据源,显得很繁琐。 另一种方式是通过修改连接字符串来连接到指定的Server。 比如我通过Qt 的 QODBC 连接到指定的Server的指定数据库实例: QSqlDatabase db = QSqlDatabase::addData原创 2014-03-05 09:57:54 · 25970 阅读 · 0 评论 -
Qt实现Windows远程控制
用Qt实现的Windows平台远程控制软件,包含源代码和编译后可以运行的程序,服务器端(被控端)为进程形式,客户端(主控端)为图形界面程序。客户端在连接时要设置服务器端的ip地址以及要显示的长度和宽度(不能超过服务器端屏幕分辨率)。原创 2014-04-30 23:29:16 · 35942 阅读 · 22 评论 -
浅析 C++ 调用 Python 模块
浅析 C++ 调用 Python 模块作为一种胶水语言,Python 能够很容易地调用 C 、 C++ 等语言,也能够通过其他语言调用 Python 的模块。Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中调用 Python 模块。具体的文档参考官方指南: Embedding Python in Another Application调用方法1 链接到 Python 调用库原创 2016-03-14 21:34:55 · 35652 阅读 · 7 评论