随笔:8 文章:0 评论:1 引用:0
C++博客 首页 发新随笔
发新文章 联系 聚合管理

2008年11月10日

 

寒冷的季节,注定了有寒冷的故事。不知道从什么时候起,景依每天必做的功课成了等待。

 

2000,景依开始洗澡,傍晚与桐通过电话,桐说今夜会陪她。

2100,一切搞定,翻开手机,在刚才的60分钟里,不曾有过动静。

2130,发条消息给桐,我刚搞定一切,你要来了吗?开始换衣服。

2200,任然没有动静,再发一条,喝醉了吗?我在等你。

没有回音。阿

景依端着刚煮好的咖啡到落地窗前小圈椅里坐定,啜一口,低头看看自己,乳白色吊带裙子,白色细带凉鞋,裸露的长腿和脖子上的水晶吊坠同样闪着珍珠般的光泽,长发散发着桐最着迷的味道,她细心地收拾自己,只为了等待已久的第一次相约。

这是一个土得不能再土的故事,网络成就了许多人,也造就了很多事,那天上午,景依同往常一样,来到聊天室练习打字,聊天室真是个练字的好地方,景依现在已经能够气定神闲的同时应对十几个人的围追堵截了,但她还是希望找些个说话不那么俗套又能够练习打字的聊友,今天,她化名“颜如玉”。

一进门,一堆异性呼号着“美女”涌上来,景依微笑着一一挡开,这时,一个叫“吾心如月”的聊友开口了:颜如玉,你是要寻找黄金屋吗?

不一样的开场白让景依有些愕然。

有一搭没一搭扯开后,知道对方叫桐,一个年轻的生意人,敏捷的思维总能让他在景依故意刁难的时候轻松绕开然后反戈一击,景依喜欢聪明的男人,于是顺理成章加了QQ继续聊。

酒逢知己千杯少的感觉是酣畅淋漓,那天不知道说了多少话,套用桐的说法是:几万个字了,我从来没有和别人这样聊过。

景依笑笑:我也没有过。但是她不说,眼前这个男人和自己太相似了,会在同一时刻想到同样的言语,会就同一件事情发表同样的观点,会在同时发给对方一个笑脸,许多话,景依说了一半,他已经接出了另一半。

景依很眩,眼前这个男人,有点可怕。

“你在干什么?”一天桐先问到。

“我在想你的样子”景依笑笑。

“那你猜猜哪个是我?”桐发给景依一张照片,那是他们全公司的集体照。

怎么猜得到,景依隐约感觉得其中一个似曾相识,但是,对了固然可喜,错了呢?所以不能说,借口有事,仓皇下线。

下线的瞬间,看见对方最后一句话:我好想看看你的样子。

“我的样子?”景依到镜前端详自己,要到三十已不再幼稚的脸被热气烘得很是柔媚,长发在腰间飘飘荡荡,浅绿色睡裙像春水般裹着高挑的身子,一种突如其来的寂寞袭得景依呼吸困难,这样的人儿,这样的情景,是否该有一个肩膀作为依靠?

以后的日子,在网上跟桐聊天成了景依必做的功课,桐呢?让景依猜测照片里哪个是自己成了功课中必布置的一题,知道那天,景依很突然的冒出一句:“前排最右手边的是你!”

景依突如其来的答案让电脑钱的人都愣住了,包括她自己,她不知道为什么会如此孤注一掷,但是她真切的感受到了桐的惊讶和他自己的。

桐沉默,十多分钟后,屏幕上出现了一行字:要吃午饭了,你先下吧。

景依这才想起自己该走了,她不可能猜对,阳光下也会有童话发生,可她不会是主角,光环该灭了,泡沫也该坡了,景依把身体靠到了椅背上,QQ轻轻隐身,感觉眼眶有眼泪滑出。

“我被你摧毁”桐继续,“我知道你不会猜错,我也知道你还在。”

“我想见你,”景依的眼泪脱框而出,这,才是她一直的等待,只有她自己明白,摧毁了对方,沦陷的却是自己。

初秋中午还是热气逼人,景依起身将自己的发髻绕后盘起,站到镜子前,看看一袭黑色的连衣裙,与那双金色的高跟鞋很是协调,再束上腰带,匆匆下楼,桐的车子早已在等待,拉开车门的刹那,涌出的气流和景依的长发,同时挥落了桐一地的目眩,几秒钟的愣怔后桐才开口:“你好美。”有些走样的声调让景依满心欢喜。相见恨晚的感觉让他们紧紧的抱在了一起,在宾馆的房间里景依完成了自己人生的涅槃,身体的痛楚结合着灵魂的愉悦,一如景依所憧憬的情感的飞跃。

庸俗的开头,便有了庸俗的过程,整个秋天,两人频繁见面,景依完全不顾及桐已有家室,坐桐的车兜风,跟桐一起吃饭是她每天的期待,桐越来越成为景依的依恋,直到秋天过去,冬天来临。

寒冷的季节,注定了有寒冷的故事。不知道从什么时候起,景依每天必做的功课成了等待。

桐忙,桐一直很忙,等他回一个消息往往需要一个多小时,或者更久。

桐是个生意人,他的想法多姿多彩,他的思想天马行空,景依从来摸不透,也别指望能摸透。

桐有妻子,空闲的时候,他还要履行他的责任。

………..

命属白羊的景依有着白羊座女孩所有的特点:全身心的投入但从不主动出击,白羊座信奉爱在该来的时候自己会来,跳出来寻找机会不是他们的信条。

于是,还是无尽的等待。

多年钱,歌手张学友缠绵在自己的幸福里哼唱着“等待着别人给幸福的人,往往过得不怎么幸福。。。”来告诫听者时,千千万万的人却仍然前赴后继拗着一股子劲妄想改变前人的经验,努力着,失败着,继续着,如景依般执着。

是的,是执着,景依坚持每三天发 一个问候或者想念给桐,之后继续着属于自己的等待,自己的,是的,是属于她一个人的,她曾经问过自己:“如果我不给桐发消息,他会发给我吗?”事实证明,不会,如今天,是景依在无数次忍不住后第一回坚持半个月没有给桐任何消息,桐同样没有任何音讯。

2330,收到桐的消息:我回家了,以后我会补偿你的。

一闪而过的失神,景依眯起眼镜,抬头看看窗外:早先休息,想你。想了想,补上一句:你不方便,别回了。虽然骨子里的期待是如此的清醒,但是…..

桐没有回,理所当然的。

一个冗长的开头,一个短暂的结尾,景依托起杯子轻抿,才发现自己索然一直用心的捧着,然而一切其实都已经凉透,该有的醇香丝毫未曾保留,如这世上纷繁复杂的交错,丝毫没有给景依一丝喘息的机会。以往,爱来临时,景依是从容的,她的出众总让她在众人的眼里如此淡定。而今,对的时间里,对的人,对的情感付出,那么错的是什么呢?全身心毫无防备的投入,是对所有付诸她的情感的一次回应吗?一生一世一回爱,何等的刻骨铭心,何等的痛彻心肺,关上手机的瞬间,景依听见了心裂开的声音。

 

 

posted @ 2008-11-10 19:23 情趣所致 阅读(194) | 评论 (0)编辑 收藏

2008年11月1日

下面只是最基本的操作。

 

程序环境:

VS 2005

C#

WINFORM

 

在源程序中

1.程序完成后,点击生成,生成成功后,系统会在工程文件夹的DEBUG目录里产生相应的EXE文档及DLL

2.不要点击发布,因为发布后会在工程文件夹的DEBUG目录里产生一个setup.exe等文档,而这些是安装程序所 不需要的。

3.建议删除工程文件夹的DEBUG目录里的内容,再点击重新生成。

对源程序进行部署:

1.创建一个部署的工程文件:文件-新建项目-其他项目类型-安装和部署-安装项目(没研究过这几个模板的区 别)-给工程命名

2.添加一个新文件夹:右键单击应用程序文件夹-添加-文件夹,这样便会在应用程序文件夹下产生一个新的文 件夹,请给他命名(也可以不用添加这个文件夹而直接添加程序必需的文件,这样做的目的主要是为了方便 管理包含其他文件(如:图片)的一些程序)

3.添加必要的文件:右键单击上一步产生的新建文件夹-添加-文件-选择工程文件夹的DEBUG目录里所有的文件 并添加

4.添加程序快捷方式:右键单击用户的“程序”菜单-添加-文件-选择工程文件夹的DEBUG目录里程序的执行文 件(程序名.exe)并添加-右键单击添加的执行文件-创建快捷方式-删除刚才添加的执行文件-修改属性里的 target值并将他指向程序的执行文件(程序名.exe-添加快捷方式的ICON

说明:这一步主要是添加一个指向程序执行文件的快捷方式,在上面的操作步骤中先添加这个执行文件,后来 又把他删除了,看起来很麻烦和不可思议,实际我也是这么想的,但是我找不到一下子就添加指向程序执行 文件快捷方式的方法,我也是不得以而为之,希望有人能贡献出更好的办法。

5.添加桌面快捷方式:与第4步操作方法相同。

6.生成安装包:点击生成,系统会在工程文件夹的DEBUG目录里产生相应的安装程序,有两个,但安装效果是等 同的。

7.安装应用程序:点击安装包,按系统提示就行。

说明:

1.关于.NET FRAMEWORK的问题:一般的winxp下都没有安装.NET FRAMEWORK,所以要运行用VS2005开发出来的程 序,必须安装这个运行库,这个运行库可以到微软的网站上下载(dotnetfx.exe文件),程序按上述步骤打 完包后,在安装时,安装程序会自动检查操作系统是否具备运行条件,如果缺少这个文件,安装程序会有相 应的提示的,我现在的做法是先安装.NET FRAMEWORK,再安装程序包。也有人先用INSTALLSHIED来打包,这 样就可以实现无人值守安装而不用安装两次。

2.如果要编辑注册表,用户界面,以及自定义操作,在部署工程时要对相应的编辑器进行修改。

posted @ 2008-11-01 00:35 情趣所致 阅读(3513) | 评论 (1)编辑 收藏

2008年10月31日

用于串口通信的函数和结构在Winbase.h头文件中定义。
函数 描述
CreateFile 打开串行口
GetCommState 用指定通信设备的当前控制设置填充设备控制块(DCB结构)
SetCommState 按照DCB结构的说明配置通信设备。这个函数重新初始化所有硬件
和控制设备,但不清空I/O队列
GetCommTimeouts 获得指定通信设备上所有读/写操作的超时参数
SetCommTimeouts 设置指定通信设备上所有读/写操作的超时参数
WriteFile 向串行口写数据,这样将把数据传送给串行连接另一端的设备
ReadFile 从串行口读数据,这样将从串行连接另一端的设备接收数据
SetCommMask 指定为通信设备监视的一组事件
GetCommMask 获得指定通信设备的事件掩码值
WaitCommEvent 等待指定通信设备的事件的发生。WaitCommEvent函数监视的事件
包含在与设备句柄相关联的事件掩码中
EscapeCommFunction 指导指定通信设备执行扩展功能。通常用于将串行口设置为IR模式
ClearCommBreak 恢复指定通信设备的字符传输,并设置传输线路为不可中断状态
ClearCommError 获得通信错误数据,并报告指定通信设备的当前状态

打开端口
CreateFile函数用于打开串行口,因为硬件供应商和设备驱动程序开发者可以随意命名端口,所以应用程序应该列出所有可用端口,从而使用户能够指定要打开的端口。如果端口不存在,则CreateFile函数返回ERROR_FILE_NOT_FOUND,而且应该通知用户端口不可用。
打开串行口
1 在第一个参数lpzPortName指向的通信口后插入一个冒号。例如,指定“COM1:”为通信端口。
2 指定dwShareMode参数为0。通信端口不能像文件一样被共享。
3 在dwCreationDisposition参数中指定OPEN_EXISTING。这个标志是必须的。
4 指定dwFlagsAndAttributes参数为0。Windows CE只支持非重叠I/0.
下面的代码段说明了如何打开串行通信端口。
hPort=CreateFile(lpszPortName, //指出通信端口
GENERIC_READ|GENERIC_WRITE, //读写模式
0, //共享模式
NULL, //安全属性
OPEN_EXISTING, //如何打开服务端口
0, //端口属性
NULL); //端口属性句柄的拷贝
配置串行口
打开串行口后,一般情况下,应用程序需要改变缺省设置。用GetCommState函数可以获得缺省设置,用SetCommState函数可以设置新的端口设置。
另外,端口配置还包括用COMMTIMEOUTS结构设置读/写操作的超时值。当发生超时时,ReadFile或WriteFile函数返回成功传输的具体字符数。
配置串行口
DCB PortDCB;
PortDCB.DCBlength=sizeof(DCB);
GetCommState(hPort,&PortDCB);

PortDCB.BaudRate=9600; //波特率
PortDCB.fBinary=TRUE; //只支持二进制串行传输模式
PortDCB.fParity=TRUE; //启用奇偶校验
PortDCB.fOutxCtsFlow=FALSE; //TRUE是由CTS线来控制端口的输出
PortDCB.fOutxDsrFlow=FALSE; //TRUE是由DSR线来控制端口的输出
PortDCB.fDtrControl=DTR_CONTROL_ENABLE; //DTR_CONTROL_DISABLE:
禁用DTR(Data Terminal Ready)线并保持此状态;
DTR_CONTROL_ENABLE;
启用DTR(Data Terminal Ready)线
DTR_CONTROL_HANDSHAKE
根据接收缓冲区数据的数量告诉串行驱动程序切换DTR线状态
PortDCB.fDsrSensitivity=FALSE; //TRUE为端口将忽略任何输入的字节,除非端口DSR线被启用
PortDCB.fTXContinueOnXoff=TRUE; //TRUE为如接收缓冲区已满且驱动程序已传送XOFF字符,
将使驱动程序停止传输字符
PortDCB.fOutX=FALSE; //TRUE为指定XON/XOFF控制被用于控制串行输出
PortDCB.fInX=FALSE; //TRUE为指定XON/XOFF控制由输入串行流使用
PortDCB.fErrorChar=FALSE; //Windows CE串行驱动程序默认忽略该字段
PortDCB.fNull=FALSE; //TRUE为使串行驱动程序忽略接收到的空字节
PortDCB.fRtsControl=RTS_CONTROL_ENABLE; //RTS_CONTROL_DISABLE表示当端口打开时RTS(Request and Send)行
将禁用
//RTS_CONTROL_ENABLE表示当端口打开时RTS行将启用
//RTS_CONTROL_HANDSHAKE表示RTS线由驱动程序控制,输入缓冲区
不到半满,则RTS线将被启用,否则将被禁用
//RTS_CONTROL_TOGGLE表示如果在输出缓冲区有字节要被传输,则
驱动程序将启用RTS线,否则将禁用该线
PortDCB.fAbortOnError=FALSE; //出现读/写错误并不终止
PortDCB.ByteSize=8; //指定每字节的位数
PortDCB.Parity=NOPARITY; //奇偶字段,EVENPARITY、MARKPARITY、NOPARITY、ODDPARITY、SPACERITY
PortDCB.StopBits=ONESTOPBIT; //停止位,每字节一位(ONESTOPBIT)、一位半(ONE5STOPBITS)、
两位(TWOSTOPBITS)。
if(!SetCommState(hPort,&PortDCB))
{
MessageBox(hMainWnd,TEXT("Unable to configure the serial port"),TEXT("Error"),MB_OK);
dwError=GetLastError();
return FALSE;
}

配置超时值
每次打开通信端口时应用程序都必须用COMMTIMEOUTS结构设置通信超时值。如果不配置这个结构,则端口使用驱动程序提供的缺省超时值,或者使用上一个通信应用程序的超时值。通过假定特殊的与实际设置不同的超时设置,应用程序可以执行永远不能完成的读/写操作,或者执行完成过于频繁的读/写操作。
当读/写操作发生超时时,操作结束。而且ReadFile和WriteFile函数并不返回错误值。若想确定某个操作是否发生了超时,可以验证实际传输的字节数是否小于请求的字节数。例如,如果ReadFile函数返回TRUE,但读的字节数小于请求的字节数,则这个操作发生了超时。
配置串行口的超时值
1 调用GetCommTimeouts函数或者手工设置成员来初始化COMMTIMEOUTS结构。
2 用ReadIntervalTimeout成员指定在不发生超时的情况下两个字符间允许经过的最大毫秒数。
3 用ReadTotalTimeoutMultiplier成员指定读超时乘子。对于每个读操作,这个乘子被乘以读操作期望接收到的字节数。
4 用ReadTotalTimeoutConstant成员指定读超时常数。这个成员表示的毫秒数被加到读取的总字节数与 ReadTotalTimeoutMultiplier的乘积上。最后得到的结果是读操作发生超时前必须经过的毫秒数。
5 用WriteTotalTimeoutMultiplier成员指定写超时乘子。对于每个写操作,这个乘子被乘以写操作期望接收的字节数。
6 用WriteTotalTimeoutConstant成员指定写超时常数。这个成员表示的毫秒数被加到总字节数与WriteTotalTimeoutMultiplier的 乘积上。最后得到的结果是写操作发生超时前必须经过的毫秒数。
7 调用SetCommTimeouts函数激活端口超时设置。
为了有助于多任务处理,通常需要配置COMMTIMEOUTS结构,以便ReadFile函数能够立即返回读到的字符。要做到这一点,可以设置ReadIntervalTimeout为MAXWORD,设置ReadTotalTimeoutMultiplier和ReadTotalTimeoutMultiplier为0。

写串行口
WriteFile函数通过串行连接向另一台设备传输数据。调用这个函数之前,应用程序必须打开和配置串行口。
因为Windows CE不支持重叠I/O(也称为异步I/O),所以主线程或者任何创建窗口的线程都不应该试图向串行口写大量数据。这样的线程将被阻塞,因而不能管理消息队列。应用程序可以通过创建多个线程处理读/写操作以模拟重叠I/O。为了协调多个线程,应用程序可以调用WaitCommEvent函数阻塞线程,直至发生特定的通信事件。
写串行口
1 用CreateFile函数返回的句柄。
2 用lpBuffer参数指定要写的数据的指针。这一数据通常是二进制数据或者字符数据。
3 用nNumberOfBytesToWrite参数指定要写的字符数。对于基于Windows CE的设备,通常写一个字符,因为应用程序必须将Unicode 字符转换为ASCII字符,以便将文本传输到串行连接另一端的设备。
4 用lpNumberOfBytesWritten参数指定实际写的字节数的指针。WriteFile函数填充这个变量,以便应用程序能够确定数据是否已 被传输。
5 lpOverlapped参数必须是NULL。
读串行口
ReadFile函数从串行连接另一端的设备获取数据。参数与WriteFile相同。
通常情况下,读操作是一个独立的线程,他总是随时准备处理到达串行口的数据。通信事件通知读线程串行口有数据可读。读线程通常一次读一个字节(每读一个字节调用一次ReadFile函数),直至读完所有数据,然后读线程等待下一个通信事件。

使用通信事件
通信事件是当发生重要事件时Windows CE向应用程序发送的通知:应用程序可以用WaitCommEvent函数阻塞线程,直至特定事件发生;用SetCommMask函数可以指定继续处理前必须发生的事件。如果指定了多个事件,则任何一个指定事件的发生将导致WaitCommEvent函数返回。
例如,这种机制使应用程序能够知道数据何时到达串行口。通过等待表示数据到达的通信事件,应用程序可以避免因调用ReadFile函数等待数据到达而阻塞串行口。只有当有数据可读时才应该调用ReadFile函数。
事件 描述
EV_BREAK 输入中发生中断
EV_CTS CTS信号状态发生变化
EV_DSR DSR信号状态发生变化
EV_ERR 发生线路状态错误,线路状态错误包括CE_FRAME,CE_OVERRUN和CE_RXPARITY
EV_RING 检测到振铃指示
EV_RLSD 接收线路信号检测的信号状态发生变化
EV_RXCHAR 接收到字符,并置于输入缓冲区中
EV_RXFLAG 接收到事件字符,并置于输入缓冲区中
EV_TXEMPTY 输出缓冲区中的最后一个字符已被发送

使用通信事件
1 调用SetCommMask函数指定要查找的事件。
2 调用WaitCommEvent函数,并指定导致这个函数返回的事件。当应用程序指定多个事件时,lpEvtMask参数指向表示导致 WaitCommEvent函数返回的事件的变量。
3 WaitCommEvent函数返回后,循环调用ReadFile函数,直至读完所有接收到的数据。
4 再次调用SetCommMask函数,指定要查找的事件。
SetCommMask函数通常是应用程序在监视串行口和读数据的循环中第一个调用的函数。下面的代码说明了如何将通信事件用于这个目的。
BYTE Byte;
DWORD dwBytesTransferred;

SetCommMask(hPort,EV_RXCHAR|EV_CTS|EV_DSR|EV_RLSD|EV_RING);
while(hPort!=INVALID_HANDLE_VALUE)
{
WaitCommEvent(hPort,&dwCommModemStatus,0);
SetCommMask(hPort,EV_RXCHAR|EV_CTS|EV_DSR|EV_RING);
if(dwCommModemStatus & EV_RXCHAR)
{
do
{
ReadFile(hPort,&Byte,1,&dwBytesTransferred,0);
if(dwBytesTransferred==1)
ProcessChar(Byte);
}while(dwBytesTransferred==1);
}
}

最后关闭串行口
CloseHandle(hPort);
posted @ 2008-10-31 11:52 情趣所致 阅读(1479) | 评论 (0)编辑 收藏

2008年10月29日

什么造就了杰出的程序开发者?
作者:佚名  出处:中国自学编程网收集整理   发布日期:2008-04-21  
1。悲观 

杰出的程序开发者对于他们的工作总是很悲观,这并不意味着他们不会快乐,不会充满活力,性格不开朗,而是他们总是时时思考到底哪里会出现问题,以及如何得到处理。 

他们会假定在某个时刻,悲剧降临,所有已经完成的工作都不得不重做,所有硬件都宕掉,所有的安全措施都被攻破,甚至(这个有点过分)办公室被夷为平地……所有辉煌的假设,即使将有可能发生在同一天,他们会立即有一个具体的,可操作的,可检验性的,全面测试的计划来应付这方面的问题。 

悲观的开发者会有不断的寻找漏洞的观念,并不仅将想法停留于想法,而是要确保该想法能够完全实现。这种神经质的妄想,悲观的态度,正是稳健,安全,可靠代码的保证。 

2。懒惰 

懒惰的确是杰出开发者的特制,他们会极为讨厌做重复性的工作,浪费时间的工作,杰出开发者会寻求自动化的架构过程,可伸缩的代码,自动化的单元测试等……每一个项目,不是从地而起的再来一遍。 

3。好奇 

杰出的程序开发者面对问题会好奇会不会有更好的解决方案,他们会被新的方式,新的途径所鼓舞,并设法不仅从细节也从整体改进现有的系统。 

好奇,孕育着创意,这是在任何开发中都非常可取的特质,有强烈的愿望寻找原因,并通透解决之道。 

4。细致 

看似莽汉,却有绣花针般的细心,写程序就像绣花,每一个代码规范,整齐,各落其位。 

你是一个杰出的程序开发者么?
posted @ 2008-10-29 00:35 情趣所致 阅读(222) | 评论 (0)编辑 收藏

2008年10月22日

软件中有大量的鼠标交互过程,程序运行一段时间后,出现“获取所需资源失败”故障退出程序。

开始估计是程序界面修改时资源ID不匹配所导致的,经过详对比**.rc文件,没有找到答案。无意间发现程序所占内存极大,进一步发现程序初始化完成后所占内存较小,程序中有内存泄露之处。运行程序、操作发现鼠标移动时内存急速增长。调试发现在View之OnMouseMove()中
CDC *pDC=GetDC();处是导致内存增长的原因。在OnMouseMove()结束处加入ReleaseDC(pDC); 问题解决。(魔鬼都在细节里哈)
posted @ 2008-10-22 17:20 情趣所致 阅读(274) | 评论 (0)编辑 收藏

2008年10月21日

十分漂亮,方变得界面库。



posted @ 2008-10-21 00:12 情趣所致 阅读(402) | 评论 (0)编辑 收藏

2008年10月16日

     摘要:  实战DeviceIoControl 之一:通过API访问设备驱动程序 Q 在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数、读写绝对扇区数据、测试光驱实际速度等,该从哪里入手呢? A 在NT/2000/XP中,应用程序可以通过API函数DeviceIoControl来实现对设备的访问—获取信息,发送命令,交换数据等。利用该接口函数向指定的设备驱动发送正确...  阅读全文
posted @ 2008-10-16 15:44 情趣所致 阅读(5784) | 评论 (0)编辑 收藏

2008年10月15日

DShowLib是IMAGE CONTROL提供的1394接口相机开发库。在使用该库时出现了与COM控件(比如:WEB控件)的冲突,OLE初始化失败,导致所有基于COM技术的控件无法使用,出现运行时错误(控件窗口创建失败)。调试分析结果为DShowLib的initial过程其实也是OLE的初始化,但其修改了一些设置导致其它COM控件无法使用。

解决办法:
        优先初始化OLE,将DShowLib的initial放在后边,等所有其它COM控件创建完成后再进行DShowLib之grabber等的创建。这样既可以避免如上所述之问题。

 1 DShowLib::Grabber *p_Grabber;  //必须定义成指针
 2 C**WinApp theApp;
 3 
 4 void C**WinApp::Initialize()
 5 {
 6    /**/
 7    if(!AfxOleInit())
 8       return ;
 9    if(!DShowLib::initial(""))
10         return ;
11    //
12    p_Grabber=new DShowLib::Grabber();
13    //
14 }
posted @ 2008-10-15 19:16 情趣所致 阅读(942) | 评论 (0)编辑 收藏
CALENDER
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜


Powered By: 博客园
模板提供沪江博客