
VC++
文章平均质量分 73
DotNet灵魂
知而达智 智而达远
展开
-
VC读注册表
CString GetSoftWarePath(){CString strPath = _T("");HKEY hkey;DWORD dwSize = 512; char string[512]; LPTSTR pValue; pValue="Path";//LPCTSTR Rgspath="key" ;RegOpenKeyEx(HKEY_LOCAL_MAC转载 2009-06-29 17:00:00 · 2894 阅读 · 1 评论 -
CComPtr学习
这些天在弄有关的智能指针,因为其原理与通用的智能指针相似,但并不完全相同,故只是借鉴学习一下CComPtr,这是按照 msdn上学习的,可能在有的方法还不是理解太透,希望不会引起什么误解。CComPtr()这是一个构造函数,初始化成员变量,默认的构造函数是将P设为NULL,拷贝构造函数则是将p指向了LP并且通过P调用AddRef,然后在其析构时会通过P调用Release。Detach():这个函数转载 2008-12-10 16:01:00 · 1128 阅读 · 0 评论 -
进程间管道双向传输
为了符合新的架构,需要实现进程间的双向传输数据模型,今天下午做了一些研究,并把研究成果记录下来。很简单,有两个进程,P1进程调用P2进程,并且P1和P2进程进行双向数据的传输。P1代码如下:#include errno.h>#include fcntl.h>#include stdio.h>#include stdlib.h>#include unistd.h>#include sys/t转载 2009-02-23 12:03:00 · 1433 阅读 · 0 评论 -
CComPtr用法
CComPtr用法COM接口指针很危险,因为使用过程中需要每一个使用者都要严格并且正确的AddRef和Release,一旦出现问题,就会造成对象不能被正常释放,或者对象被重复删除,造成程序崩溃。所以使用COM接口,必须小心翼翼才行。但是,即使所有的代码中,都正确的AddRef和Release,也不一定能保证万无一失,例如:void SomeApp( IHello * pHe转载 2008-12-10 15:55:00 · 601 阅读 · 0 评论 -
Windows匿名管道技术
不知你是否用过这样的程序,他们本身并没有解压缩的功能,而是调用DOS程序PKZIP完成ZIP包的解压缩。但是在程序运行时又没有DOS控制台的窗口出现而且一切本应该在DOS下显示的信息都出现在了那个安装程序的一个文本框里。这种设计既美观又可以防止少数眼疾手快的用户提前关了你的DOS窗口。现在就来讨论一下,如何用匿名管道技术实现这个功能。管道技术由来已久,相信不少人对DOS命令里的管道技术最为熟悉。当转载 2009-02-20 16:02:00 · 3704 阅读 · 0 评论 -
VC++下对匿名管道的编程实现
概述 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。 匿名管道实施细则 匿名管道由CreatePipe()转载 2009-02-20 16:00:00 · 1111 阅读 · 0 评论 -
VC 线程间通信
1.使用全局变量 实现线程间通信的方法有很多,常用的主要是通过全局变量、自定义消息和事件对象等来实现的。其中又以对全局变量的使用最为简洁。该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制。 由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进行说明。使用全局变量进行线程通信的方法非常简单,通过下面转载 2009-02-17 16:23:00 · 5254 阅读 · 1 评论 -
设置指定线程的优先级
BOOL SetThreadPriority( HANDLE hThread, // handle to the thread int nPriority // thread priority level ); 功能说明 设置指定线程的优先级 参数说明 hThread 要设置的线程句柄 nPriority 优先级别参数 可设置为一下参数 THR原创 2009-02-17 14:36:00 · 11339 阅读 · 0 评论 -
BSTR、char*和CString转换
BSTR、char*和CString转换 (1) char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:char chArray[] = "This is a test";char * p = "This is a test"; 或LPSTR p = "This is a test";转载 2009-02-16 13:50:00 · 698 阅读 · 0 评论 -
VC2005编译的问题
1.无法解析的外部符号"wchar_t*__stdcall_com_util::ConvertStringToBSTR(charconst*)"(?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z)答:这个问题可以通过改工程设置解决ConfigurationProperties->C/C->LanguageTreatwchar_tasBuilt-inTy原创 2009-02-16 13:42:00 · 808 阅读 · 0 评论 -
想成为嵌入式程序员应知道的0x10个基本问题
1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有转载 2009-02-10 14:22:00 · 497 阅读 · 0 评论 -
windows mobile 关闭gprs连接
unsigned int CloseRasGPRSConnections(){ int index; // An integer index DWORD dwError, dwRasConnSize, dwNumConnections; // Number of connections found RASCONN RasConn[20]; // Buffer for con转载 2009-02-10 14:24:00 · 1824 阅读 · 2 评论 -
WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
{返回当前线程的虚拟句柄}GetCurrentThread: THandle;{返回当前线程 ID}GetCurrentThreadId: DWORD;{返回当前进程的虚拟句柄}GetCurrentProcess: THandle;{返回当前进程 ID}GetCurrentProcessId: DWORD;提示:ID 是系统唯一的标识.所谓虚拟句转载 2009-01-18 21:08:00 · 3072 阅读 · 0 评论 -
VC++中 PostMessage和SendMessage的区别
最近利用vc编写UDP通讯程序,对其中的消息机制进行了整理。vc中的消息处理与.net中不同。Net中都给我们封装好了,采用代理的方式可以进行操作。而在vc中,要自己写消息响应函数。1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且转载 2009-01-18 21:10:00 · 16118 阅读 · 2 评论 -
如何在 Visual C++ 中使用 STL 队列类的该成员函数
队列适配器包含队列所支持的容器的类型定义的类型的对象。 支持在两个容器是列表和在 deque。 对象并通过 push() 插入而 pop() 被删除。 front() 返回 (也称为 FIFO) 队列中的最早的项,并 back() 返回最新的项目在队列中插入。 Prototypes---------- queue::push(); queue::pop(); queue::e转载 2008-12-30 17:45:00 · 3067 阅读 · 1 评论 -
CComPtr 和 CComQIPtr
对于操作原始的接口指针是比较麻烦的,需要我们自己控制引用记数、API 调用、异常处理。于是 ATL 提供了2个智能指针的模板包装类,CComPtr,这两个类都在 中声明。CComQIPtr包含了 CComPtr 来使用智能接口指针,唯一要说明的一点就是:CComQIPtrCComQIPtr // 智能指针 smart pointer,按照匈牙利命名法,一般以 sp 开头转载 2008-12-10 15:56:00 · 663 阅读 · 0 评论 -
如何给filter添加接口
给一个filter添加接口,步骤如下: 1、建立一个声明接口的头文件“Interface.h” ,内容包括指定接口的GUID(使用GuidGen.exe)以及接口函数的声明。 记得加 initguid.h 的include,不然使用时会出现"无法解析的外部符号_IID_"错误2、在Cfilter类的头文件filter.h开头添加 #include “Interface.h”转载 2008-12-12 15:47:00 · 1462 阅读 · 0 评论 -
关于directshow的开发常见问题
一、配置方法1、先编译Samples/C++/DirectShow/BaseClasses中的工程文件。注意工程的默认选项是Debug_Unicode的,在非Unicode的工程中使用还需要编译Debug版本的。“DXSDK90/SAMPLES/C++/DIRECTSHOW/BASECLASSES/baseclasses.dsw的release版本”,指的是运行DXSDK90/SAMPLE转载 2008-12-12 18:37:00 · 948 阅读 · 0 评论 -
用Visual C++干干净净地清除进程
读者朋友们可能经常会碰到这样一个问题,想对某些进行操作时,发现这些文件正在被其它程序使用,处于打开状态,而且是被独占打开,这时是没法对文件进行操作的。因此,要想操作这些文件,必须将打开这些文件的进程清除掉。那么如何干净地清除进程呢?其实,在Windows2000操作系统版本中有一个工具程序叫tskill.exe,用它就可以清除掉某个程序的进程,在输入"tskill 程序名"后就可以清除其运行实例。转载 2009-06-29 14:58:00 · 1725 阅读 · 0 评论 -
如何在VC++中使用注册表
如今修改注册表成为继超频之后的又一大热点,许多CFAN通过对注册表的修改使Win98显得更加个性化,诸多报刊杂志也纷纷扯起注册表这面旗帜,令人遗憾的是,在介绍注册表修改的众多的文章中,大都以手工修改为例,极少数文章也只介绍有关修改注册表软件的用法,至于如何在程序中实现却无人提及。为此我在Visual Studio6.0帮助文件中用Registry关键字进行搜索,在翻译软件帮助下及不断的上机实践下,转载 2009-06-29 17:03:00 · 720 阅读 · 0 评论 -
VC 注册表操作
近来由于需要在自己写的程序中对注册表进行操作。总结些经验,并做个一个DEMO供日后使用,现在把它拿出来和大家分享…… 小弟初学VC,有误之处还请赐教。为了使用方便,我把一些操作写成了函数,以便方便调用,具体代码如下所示:一、定义 HKEY hKey;char content[256]; //所查询注册表键值的内容DWORD dwType=REG_SZ; //定义读取数据类型DWORD dwLeng转载 2009-06-29 17:01:00 · 909 阅读 · 0 评论 -
VC程序中如何结束系统正在运行的其他进程
在VC程序中如何结束系统正在运行的其他进程(该进程必须有窗口界面),其实很简单,按如下步骤进行即可: 1.取得进程的句柄(利用FindWindow函数得到); 2.获取进程ID号(用GetWindowThreadProcessId函数获取); 3.打开进程,OpenProcess函数中的第一个参数设为PROCESS_TERMINATE,就可以获取处理该进程的句柄; 4.利用转载 2009-06-29 14:57:00 · 1422 阅读 · 0 评论 -
vc读写注册表
注册表是Windows重要组成部分,注册表记录了大量有关电脑软硬件的信息。注册表中的值通过其名称标识。值名称由与键名相同的字符组成。值本身可以是字符串、二进制数据或者是32位无符号值。在这里我们主要运用以下技巧:(一)、预定义的注册表键。注册表包含了几个预定义键: HKEY_LOCAL_MACHINE 包含描述计算机及其配置的条目。其中包括关于处理器、系统主板、内存和已安装的软件和硬件的信息。转载 2009-06-29 17:05:00 · 1165 阅读 · 0 评论 -
SetTimer 方法
SDK编程笔记 — 计时器篇什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了。 让我们先来看看SetTimer函数的原型: UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)) 当使转载 2008-12-26 14:33:00 · 2292 阅读 · 2 评论 -
rand函数和srand函数:产生随机数
rand(产生随机数) 相关函数 srand 表头文件 #include 定义函数 int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 返回值 返回0至RAND_MAX之间的随机数值转载 2009-03-09 16:16:00 · 10450 阅读 · 6 评论 -
C++随机数的用法
学过别的高级语言的都知道,产生随机数用的都是类似于random这样的字符,c++也不例外,在C++中使用的是rand()函数,但是不同的是,如果在C++中只使用了例如"int i;i=rand();"这样,使用程序会发现每次得到的随机数都是一样的,据了解在C++中这样做是为了方便调试。如果要每次都长生不同的随机数,我们则需要在C++中加上"srand(time(NULL));"这条语句,他的转载 2009-03-09 16:13:00 · 1739 阅读 · 0 评论 -
CString、TCHAR*、char*转换
char*、TCHAR*转换CString CString str(****) 下面详细写一下其它转换 ////////////////////////////// /* *********************************************************************** * 函数: TransCStringToTCHAR * 描述:将CString 转换转载 2008-12-13 15:16:00 · 1009 阅读 · 0 评论 -
CString,string,char*的综合比较(二)
e) 增加作用char*stringCString动态增加值strcatpushappendAppendAppendCharAppendFormatf) 截取作用char*stringCString得到部分值用下标原创 2008-12-13 14:41:00 · 566 阅读 · 0 评论 -
VC常用数据类型使用转换详解
CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typedef const char * L转载 2008-12-13 14:43:00 · 625 阅读 · 0 评论 -
编译FilterTitleOverlay和SimplePlayer时碰到的问题
用VS.NET 2003编译《DirectShow实务精选》中的FilterTitleOverlay例子,碰到以下问题:1.C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/atlmfc/include/atlcomcli.h(799): error C2059: 语法错误 : “catch”C:/Program Files/Micros转载 2008-12-12 18:46:00 · 648 阅读 · 0 评论 -
Debug 和 Release 编译方式的本质区别
一 Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd转载 2008-12-12 16:41:00 · 525 阅读 · 0 评论 -
CString,string,char*的综合比较(一)
一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(A转载 2008-12-13 14:40:00 · 517 阅读 · 0 评论 -
vc 进程间通讯
在Windows下各个任务是以不同的进程来完成的,当一个进程启动后,操作系统为其分配了4GB的私有地址空间,由于位于同一个进程中的线程共享同一个地址空间,所以线程间的通信很简单,就像两个人如果在同一个房间里说话的话就比较容易,只要动动嘴皮子就OK了, 但是如果在两个国家里就比较麻烦,必须借助于一些其他的手段,比如打电话等. 以下介绍四种进程通信方式,虽然是在windows下的环境但是在其他的操作系转载 2008-11-06 15:41:00 · 2924 阅读 · 0 评论 -
VC++进程间相互通信的十一种方法
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方 另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。属于其它进程的内存则是隐藏的,转载 2008-11-06 15:18:00 · 815 阅读 · 0 评论 -
VC++标题的改变
1·文档标题的改变 文档标题在是由工程中相应的文档类所控制的,我们可做如下实验。运行上面AppWizard生成的程序SDITitle,选择选单中的“文件”“打开”选项,打开“SDITitile.h”文件,则标题栏变成“SDITitle.h - SDITitle”。这一切动作都是MFC类自动进行的。了解这一点,我们可在相应的文档类中,利用SetTitle原创 2008-10-28 17:12:00 · 1110 阅读 · 0 评论 -
Windows多线程多任务设计初步
[前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的应用软件无一不是多线程多任务处理,单线城的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序转载 2008-10-29 11:09:00 · 582 阅读 · 0 评论 -
AfxBeginThread的基本用法
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UNT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECUR原创 2008-10-14 13:31:00 · 29989 阅读 · 1 评论 -
Directshow+WMF(Windows Media Format)实现无缝播放视频
原理很简单,就是两条连路,一条正在播放一条准备,播完立刻开始播放下一条连路,这样反复应用.网络图了简单,用了WMF. 开发的DS,两个接受Filter unit RenderFilter;interfaceuses Directshow9, DSUtil, BaseClass, ActiveX, Windows, Log, Sample, PushManager, SysUtils, WMF转载 2008-10-29 11:12:00 · 3159 阅读 · 0 评论 -
Win32多线程程序设计之线程通信 (三)
信号量 信号量是维护0到指定最大值之间的同步对象。信号量状态在其计数大于0时是有信号的,而其计数是0时是无信号的。信号量对象在控制上可以支持有限数量共享资源的访问。 信号量的特点和用途可用下列几句话定义: (1)如果当前资源的数量大于0,则信号量有效; (2)如果当前资源数量是0,则信号量无效; (3)系统决不允许当前资源的数量为负值; (4)当前资源数量决不能大于最大资源数量。 创转载 2008-10-29 11:08:00 · 572 阅读 · 0 评论 -
Win32多线程程序设计之线程通信 (二)
临界区 定义临界区变量CRITICAL_SECTION gCriticalSection; 通常情况下,CRITICAL_SECTION结构体应该被定义为全局变量,以便于进程中的所有线程方便地按照变量名来引用该结构体。 初始化临界区VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriti转载 2008-10-29 11:08:00 · 538 阅读 · 0 评论