![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
文章平均质量分 89
梦想飞扬
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
进程外COM组件的一个实例
步骤大概是这样的:我有一个com.exe的进程外com组件,暴露出一个ITestObject的接口。现在CustomizedWay.exe要调用这个com组件,但不希望通过注册表那一套。 虽然微软提供了registry-free的com组件机制,但目前只支持进程内COM组件(具体参考前文),但由于我们知道一个COM组件被调用的来龙去脉,我们可以跳过MS那一套,自己来完成这个工作 (如果你愿转载 2013-11-21 17:25:37 · 3233 阅读 · 0 评论 -
Boost智能指针
智能指针能够使C++的开发简单化,主要是它能够像其它限制性语言(如C#、VB)自动管理内存的释放,而且能够做更多的事情。1、 什么是智能指针智能指针是一种像指针的C++对象,但它能够在对象不使用的时候自己销毁掉。我们知道在C++中的对象不再使用是很难定义的,因此C++中的资源管理是很复杂的。各种智能指针能够操作不同的情况。当然,智能指针能够在任务结束的时候删除对象,除了转载 2014-02-28 14:31:41 · 595 阅读 · 0 评论 -
Boost库中对this指针的包装
使用enable_shared_from_this解决this指针引用问题说明The header defines the class template enable_shared_from_this. It is used as a base class that allows a shared_ptr to the current object to be obtained from转载 2014-03-03 14:35:26 · 818 阅读 · 0 评论 -
windows下使用MinGW+msys编译ffmpeg
本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处。 FFmpeg是在Linux平台下开发的,但它同样可以在其它操作系统环境中编译运行,本文介绍的就是在windows下编译FFmpeg。一 编译准备 您最好新建一个目录专门用来保存以下下载的文件。1 下载 MinGW 和 M转载 2014-04-01 16:23:23 · 482 阅读 · 0 评论 -
FFMPEG WINDOWS平台编译
FFmpeg是在Linux平台下开发的,但它同样也可以在其它操作系统环境中编译运行,本文介绍的就是在windowsXP下编译FFmpeg。一 准备环境:1 下载 mingw 和 MSYS去 http://sourceforge.net/projects/mingw/ 下载A 点击“DownLoad mingw-get-inst-...exe”;B 切换到页面:转载 2014-04-01 16:24:02 · 698 阅读 · 0 评论 -
ffmpeg开发指南
FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.TCPMP, VLC, MPlayer等开源播放器都用到了FFmpeg。 一、转载 2014-04-01 16:22:16 · 534 阅读 · 0 评论 -
调试技巧 —— 如何利用windbg + dump + map分析程序异常
MiniDump.h[cpp] view plaincopyprint?#include #include //#include "dbghelp.h" //#define DEBUG_DPRINTF 1 //allow d() //#include "wfun.h" #pragm转载 2014-03-25 16:27:41 · 938 阅读 · 0 评论 -
获取对话框中的控件指针
1. 采用GetDlgControl获取控件指针;[cpp] view plaincopy//以IE控件为例 CComPtr spIWebBrowser2; GetDlgControl(IDC_EXPLORER,IID_IWebBrowser2,(void **)&spIWebBrowser2); 2.转载 2014-03-25 16:25:34 · 1651 阅读 · 0 评论 -
UNICODE,GBK,UTF-8区别
UNICODE,GBK,UTF-8区别 简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如转载 2014-03-25 16:41:19 · 549 阅读 · 0 评论 -
iTALC 网络教室平台 编译及使用简介
今天试着基于 iThinkX 平台编译了一份 iTALC 网络教室平台,大概过程如下:准备工作,解决依赖:我 先下了一份git 版的,用的是 cmake 来编译的,结果,发现,这个软件声称需要 Linux-PAM 的支持,但是在官方说明文档中并没提到这个支持,于是,我就试着下了一份 Linux-PAM ,经过几次编译调试,最终用的以下配置命令通过 Linux-PAM转载 2014-02-18 15:19:44 · 4064 阅读 · 0 评论 -
WINVNC源码阅读(三)
rdr是winvnc用来io操作的一个库工程。IO操作无非两种,写入和读取数据,所以这里每个类都相应地分成了IN和OUT两种操作,先分析IN。 view plainclass InStream { public: virtual ~InStream() {} // check() ensures there is buffer data for at least转载 2014-02-17 17:16:05 · 1078 阅读 · 0 评论 -
Windows平台下的内存管理
1. Windows平台下主要的内存管理途径申请释放newdeletemallocfreeCoTaskMemAllocCoTaskMemFreeIMalloc::allocIMalloc/freeGlobalAlloc转载 2013-11-10 18:51:21 · 751 阅读 · 0 评论 -
使用VARIANT传递数组的方法及步骤
在使用COM/DCOM写组件时经常要传递数组,一般比如SHORT,LONG等指针可以直接传递相应的指针,但是当遇到需要传递BYTE数组就有问题了,COM不支持BYTE类型参数,传递BYTE数组也就无从说起了。经过查找资料发现使用VARIANT变量可以传递任何类型的数组,随将使用VARIANT数组的方法总结一下。其实在VARIANT传递数组的方法非常简单,只要理解SAFEARRAY数组的使用方法即可转载 2014-02-14 09:49:16 · 4420 阅读 · 0 评论 -
WINVNC源码阅读(六)
VNC客户端源码Windows版本的VNC客户端源码阅读笔记。while (!hosts.empty()) {char* hostinfo = hosts.front();Thread* connThread = new CConnThread(hostinfo);//创建一个连接线程strFree(hostinfo);hosts.pop_front();}跟进去C转载 2014-02-17 17:19:47 · 1230 阅读 · 0 评论 -
sprintf用法详解
printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。 由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出转载 2014-02-17 17:21:59 · 629 阅读 · 0 评论 -
WINVNC源码阅读(二)
omni_thread是一个C++的跨平台的线程包装库。接口文件omnithread.h可以看出一般的跨平台编码的方式:首先通过宏来判断目前所在的操作系统平台(如果你编译的时候出现了“No implementation header file”的提示,请在此文件查找对应的宏,我用的是WIN32系统,所以预定义了__WIN32__),然后包含不同的头文件(WIN32是nt.h头文件),在转载 2014-02-17 17:15:25 · 829 阅读 · 0 评论 -
WINVNC源码阅读(四)
VNCHOOKS是一个设置全局钩子的动态链接库。先看入口函数view plainBOOL WINAPI DllMain (HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved) { // Find out why we're being called switch (ul_reason_fo转载 2014-02-17 17:17:02 · 1098 阅读 · 0 评论 -
WINVNC源码阅读(五)
VNC图像更新机制VNC的图像更新机制核心为,桌面区域更新记录策略和更新区域通知策略。桌面更新区域记录主要是通过hooks记录桌面上变化的矩形区域,只记录更新的矩形区不记录具体更新的数据。更新区域记录步骤大致如下:1.wm_hooks截获桌面变化的相关消息,并转化为自定义的消息发送给WMHooksThread线程处理。 2. WMHooksThread 中用SimpleUpdateTrac转载 2014-02-17 17:17:52 · 931 阅读 · 0 评论 -
WINVNC源码阅读(七)
VNC协议分析 简介 VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议进行通信的,是一个基于平台无关的简单显示协议的超级瘦客户系统,由Cambridge的AT&T实验室设计开发的。vnc的缺省端口是main:5900(C/S)和http:5800(B/S)端口。RFB (远程帧缓存) 是一个远程图形用户的转载 2014-02-17 17:20:51 · 1556 阅读 · 0 评论 -
RFB协议
一、简介RFB(远程帧缓冲)是一个用于远程访问图形用户接口的简单协议。由于它工作在帧缓冲层,所以适用于所有的桌面系统和应用,包括X11,Windows和Macintosh等。我们把用户所在的一端(包括显示器、键盘和鼠标)被称为RFB客户端。而帧缓冲发生变化的一端(桌面系统和应用)称为RFB服务器。RFB协议是一个瘦客户协议。协议设计的重点是减小对客户端的要求。这样,客户端可以运行在多种转载 2014-02-17 17:04:14 · 4712 阅读 · 0 评论 -
EnumDisplayMonitors—多屏显示的实现
在编程中要用到相关的结构体和函数,这些都已经包装好,在multimom.h头文件中,该头文件VC自带有。在要用的的地方包含该头文件,注意在包含前面要加上一句宏定义:#define COMPILE_MULTIMON_STUBS 几个重要的结构体和函数 EnumDisplayMonitors( ) 该函数对当前用户系统中所包含的显示器进行枚举。应用程序就是通过与该转载 2014-04-11 09:11:21 · 10742 阅读 · 2 评论 -
VC 运行时库 /MD、/MDd 和 /MT、/MTd
有段时间在写cuda程序是出现过error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR71D.dll) 中定义 等类似错误原因应该是在vs2010 工程属性中 c/c++的代码生成(code generation)中的设置与cuda c/c++ Host Runtime library不一样导致的。后来在写opencv程序中的 findcontour(转载 2014-07-16 16:31:44 · 479 阅读 · 0 评论 -
字符串查找替换操作
1、std::String 方法#includestring>#includeusing namespace std;//第一种替换字符串的方法用replace()void string_replace(string&s1,const string&s2,const string&s3){ string::size_type pos=0; string::size_type原创 2015-05-03 10:13:15 · 559 阅读 · 0 评论 -
文件读取
C方式 C语言中,文件的操作都是通过一个FILE类型的文件指针进行,也就是说只有通过文件指针,才能调用相应的文件。FILE是一个由系统定义的结构体(定义在stdio.h中),可以存放文件的相关信息。文件的打开(fopen函数) 文件的操作过程一般为:打开 => 读/写 => 关闭。fopen函数的原型如下: FILE* fopen(const char* file原创 2015-05-03 12:30:13 · 972 阅读 · 0 评论 -
gsoap创建webservice服务简单教程
WebService、soap、gsoapWebService:就是一个应用程序,它向外界暴露出一个可以通过web进行调用的API,是分布式的服务组件。本质上就是要以标准的形式实现企业内外各个不同服务系统之间的互调和集成。soap:简单对象访问协议,是一种轻量的、简单的、基于 XML 的协议,它被设计成在WEB 上交换结构化的和固化的信息。从这里的概念可以看得出来,soap是一个基于x原创 2015-08-01 15:01:30 · 11892 阅读 · 10 评论 -
文件及文件处理小结
获取指定路径的文件名称TCHAR fileTitle[MAX_PATH] = {0};GetFileTitle( sChildFolderPath, fileTitle, MAX_PATH );原创 2015-08-03 16:14:10 · 450 阅读 · 0 评论 -
字符串处理小结
字符串拷贝字符串格式化_tprintf只是输出到Console窗口,如:[cpp] view plaincopydouble num1, num2; _tprintf(_T("%lf / %lf = ?\n"),num1,num2); _stprintf是输出到指定的字符串变量,如:原创 2015-09-07 17:39:04 · 472 阅读 · 0 评论 -
gsoap使用小结
参考博文:http://www.cnblogs.com/linxr/archive/2011/10/17/2215285.html要点一:wsdl2h(利用wsdl文件生成对应的h文件)用法** The gSOAP WSDL parser for C and C++ 1.2.9c** Copyright (C) 2000-2007 Robert van Enge原创 2015-12-10 21:37:19 · 618 阅读 · 0 评论 -
windows环境编译x264最新版本
搭建编译环境安装MinGW点击http://sourceforge.net/projects/mingw/下载MinGW最新版本,运行安装程序后显示"MingGW Installation Manager"界面,选"Basic Setup",将右侧的选项全部选中,再点菜单“Installation”下的“Apply Changes”开始安装。安装完成后,到MingGW/msys/1.0/e原创 2016-01-15 15:59:08 · 4963 阅读 · 0 评论 -
模拟mspaint画图程序
最近需要做一个白板控件,特别参考了windows的mspaint程序写了一个demo。基本功能如下:1、实现了一个白板控件,并使用画布的概念添加页面。2、实现了分页控制控件,方便操作白板页面。3、实现了选择、直线、铅笔、画笔、文字、椭圆、圆、三角形(等边三角形)、直角三角形(等边直角三角形)、矩形、圆角矩形、菱形(正菱形)、五边形(正五边形)、六边形(正六边形)、吸管等工具。4原创 2016-01-04 16:17:42 · 1292 阅读 · 0 评论 -
RED5、FMS相关概念(不断更新)
概念FMS是Adobe开发的一款流媒体服务器,以前叫FCS(Flash Communication Server)。RED5是开源版本的FMS,功能上没有太大的差别,一般用来做流媒体\视频会议。FMS、RED5均是用的RTMP协议,RTMP 是一种未加密的TCP/IP协议,常连接。使用FMS可以捕获(甚至录制)用户客户端的视频和音频流。信息通过FMS使用Real-Time原创 2016-01-11 19:09:38 · 1128 阅读 · 0 评论 -
把类成员函数封装成线程API所需要的函数
templateclass _Ty>void (*mem_fun_thread_t(void (_Ty::* mem_fun)()))(void*){ union{ void (*_start_address)(void*); void (_Ty::* _mem_fun)(); }thread_func;转载 2014-09-10 10:13:53 · 925 阅读 · 0 评论 -
BITMAPFILEHEADER、BITMAPINFOHEADER及BMP结构详解
位图BITMAPINFOHEADER 与BITMAPFILEHEADER:先来看BITMAPINFOHEADER,只写几个主要的 biSize包含的是这个结构体的大小(包括颜色表) biWidth和biHeight分别是图片的长宽 biPlanes是目标绘图设备包含的层数,必须设置为1 biBitCount是图像的位数,例如24位,8转载 2014-08-09 20:40:55 · 760 阅读 · 0 评论 -
#pragma pack
编辑程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型转载 2014-07-18 17:57:33 · 429 阅读 · 0 评论 -
C语言字节对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访转载 2014-07-18 09:39:14 · 480 阅读 · 0 评论 -
#pragma pack 用法详解
pack 为 struct, union 和 class 等的成员对齐指定字节边界. 与编译选项(属性 -> 配置属性 -> C/C++ ->代码生成 -> 结构成员对齐)的 /Zp 开关不同, 它不针对整个项目, 而仅针对模块, 比如一个编译单元. 1. #pragma pack(show) 以警告信息的形式显示当前字节对齐的值.2. #pragma pack(n)转载 2014-07-21 14:54:18 · 719 阅读 · 0 评论 -
混淆的概念:SIF、CIF、4CIF、D1
混淆的概念:SIF、CIF、4CIF、D1在目前国内监控行业中,涉及视频采集卡、压缩卡、硬盘录像机(DVR)等产品时,经常会遇到诸如SIF、CIF、4CIF、D1等等分辨率标准名词。而在 实际上,由于安防行业缺乏行业规范和标准,业内很多名词多来源于其它行业的标准,因此CIF、SIF、D1等几个词不但来源不同,甚至连名词本身都已经被 讹以传讹而相互混淆,令人一头雾水。 若追溯源头来看,安防转载 2014-07-01 15:55:55 · 751 阅读 · 0 评论 -
data_seg
1,#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中的全局变量。2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。3,你所谓的结果正确是一种错觉。如果你在一个DLL中这么写:转载 2014-07-04 15:47:37 · 723 阅读 · 0 评论 -
函数调用方式 FAR PASCAL,__cdecl,_stdcall,__pasc
函数调用方式 FAR PASCAL,__cdecl,_stdcall,__pascal... 解释一: 通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。 _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译转载 2014-07-01 15:32:54 · 958 阅读 · 0 评论 -
flv/f4v/m4v
F4V是Adobe公司为了迎接高清时代而推出继FLV格式后的支持H.264的F4V流媒体格式。它和FLV主要的区别在于,FLV格式采用的通常是H263编码,而F4V则支持H.264编码的高清晰视频,码率最高可达50Mbps。F4V 和 MP4 是兼容的格式,都属于 ISMA MP4 容器,但是 F4V 只用来封装 H.264 AACFLV 是 Adobe 私有格式,但是也可以用来封转载 2014-07-27 13:52:50 · 2416 阅读 · 0 评论