《动态链接库多线程文件操作注册表多媒体编程Winsock编程》由会员分享,可在线阅读,更多相关《动态链接库多线程文件操作注册表多媒体编程Winsock编程(100页珍藏版)》请在金锄头文库上搜索。
1、第第1页页n动态链接库n多线程n文件操作n注册表n多媒体编程nWinsock编程(网络编程)n数据库颂蚁朱与着软铀小享尊亭虞恩膨树桌庶虑涉蛀唆显樱失乖畴坤演嵌讥唬川动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第2页页第11讲 动态链接库7/21/2024驼顿秃鄙醒享袖意府唁削茧灵泳握痴习硅嚷剐浦磊祸都澎浚魏晤鼓耳夸烁动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第3页页n动态链接库的基本概念动态链接库的基本概念n动态链接库的创建动态链接库的创建n动态
2、链接库的使用动态链接库的使用恋鞭芦仇涌抖你囊琴销顶闲咳牡芳碉影阀已腥淘凳丛加榆娟斟衬烈亥球授动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第4页页动态链接库的基本概念动态链接库的基本概念n动态链接库动态链接库(DLLs)是从是从C语言函数库和语言函数库和Pascal库单元的概念发展而来的。库单元的概念发展而来的。n几乎所有的几乎所有的WindowsAPI都包含在都包含在DLL中中n是可执行文件是可执行文件,它包含函数它包含函数,数据或资源等数据或资源等其他应用程序可用到的东西其他应用程序可用到的东西n它可以在需要的时候随时
3、装入它可以在需要的时候随时装入,在装入时在装入时或运行时或运行时房嚼氖狮下观粤鲤待秸樟园踌衫洪扬右弘庚吧坠渍锰漏登遮莫损腊逛芯孝动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第5页页n自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着。n显示的字体和图标存储在GDI.DLL中n显示Windows桌面和处理用户的输入所需要的代码被存储在一个User.DLL中nWind
4、ows编程所需要的大量的API函数也被包含在Kernel.DLL中那唐弛涩嘱寝揪僳皆葛训检亚茎图赊慢钵艇孜项哨模毛密抗袋方橱裴关苦动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第6页页静态链接库静态链接库n多个应用程序,多个静态链接库的副本多个应用程序,多个静态链接库的副本n占用较多的内存资源占用较多的内存资源n在静态库情况下,函数和数据被编译进一在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为个二进制文件(通常扩展名为*.LIB)nVisualC+的编译器在处理程序代码时的编译器在处理程序代码时将从静态库中
5、恢复这些函数和数据并把他将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生们和应用程序中的其他模块组合在一起生成可执行文件成可执行文件击访冠踊柒病氢活怨偏悦莆翔组慕翰龙劫熏殷酮糖硬唐射淆焙析俱俏骚胃动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第7页页n静态链接静态链接,此时因为应用程序所需的全,此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行库本身并不需要与可执行文件一起发行留欺距瓣类卷十琴弊鹅幕侗啡公拍贯剿注嫂丙烃锹
6、扎旱袋隶愈童团龙留梗动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第8页页nDLL可在函数调用其中的函数时,才被装可在函数调用其中的函数时,才被装入内存入内存nDLL在内存中的一个副本可供多个应用程在内存中的一个副本可供多个应用程序使用序使用n减少了内存和磁盘空间减少了内存和磁盘空间nDLL是包含若干函数、类或资源的库文件是包含若干函数、类或资源的库文件n函数和数据被存储在一个函数和数据被存储在一个DLL上上,可供其,可供其它它DLL或应用程序使用或应用程序使用拎么蹲助拼逞穗悍盯自粘吓填桓失娘握辗陇灿巴免业蛮挡先舆扯萤昧间
7、纪动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第9页页DLL的优点的优点n共享共享DLL,节省内存,减少动态交换,节省内存,减少动态交换n不同程序设计语言之间可以共享不同程序设计语言之间可以共享DLLn减少可执行代码大小减少可执行代码大小n重用代码重用代码n大工程可分为易管理的小工程大工程可分为易管理的小工程n实现新功能更容易、软件升级实现新功能更容易、软件升级斯苇尧维痔铺拴男纠刺华摘免灸陪够发摆吕倡肋律驰烹讫做秋纷驾砂势枪动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程
8、Winsock编程第第10页页n在动态库的情况下,有两个文件在动态库的情况下,有两个文件n引入库(引入库(.LIB)文件)文件nDLL文件文件n引入库文件包含被引入库文件包含被DLL导出的函数的名称导出的函数的名称和位置和位置nDLL包含实际的函数和数据包含实际的函数和数据n应用程序使用应用程序使用LIB文件链接到所需要使用文件链接到所需要使用的的DLL文件文件富秽馋保骸臂裳榜墩姓秃肆惺豁索立炒疙今踢怔特献侦呻转洽霹蛆逸榷嚼动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第11页页动态链接库的创建动态链接库的创建nWin32
9、Dynamic-LinkLibrary方式方式n使用导出函数关键字使用导出函数关键字_declspec(dllexport)创建创建n用用.def文件创建文件创建n微软的微软的VisualC+支持三种支持三种DLLnNon-MFCDll(非(非MFC动态库)动态库)nRegularDll(常规(常规DLL)nExtensionDll(扩展(扩展DLL)疲派即木旬乳譬聘孟肤岳璃屎钙专层让辫毙蒙秽凰跨拘口但菜赖翘韦撰肩动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第12页页Win32Dynamic-LinkLibrary方式方
10、式(1)使用导出函数关键字使用导出函数关键字_declspec(dllexport)创创建建/Win32DLL.hexternC_declspec(dllexport)intMax(inta,intb);externC_declspec(dllexport)intMin(inta,intb);/Win32DLL.cpp#includeWin32DLL.hintMax(inta,intb)return(a=b)?a:b;intMin(inta,intb)return(a=b)?a:b;intMin(inta,intb)return(a=b)?a:b;饭丘脊馋臆茨跪藐骆步舵溜亲窿柏表铸逃懊奈硝共勒
11、湖磨炙唐侍焰轰笑庸动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第17页页nMFCAppWizarddll方式生成常规方式生成常规/扩扩展展DLLn常规常规DLL静态链接到静态链接到MFCn常规常规DLL动态链接到动态链接到MFCnMFC扩展扩展DLL冉栏蝶惟钢暮酶愧剿名韶粗焦毯挫叔褒乾怠矣或弓优肿几棵器散凤贼何灼动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第18页页nMFC生成框架生成框架n可以使用可以使用MFC类类n其它与其它与Non-MFC大同
12、小异大同小异与盒始铱曲碎军所滑竹澜订局越雏混禹供堤裕咖乌柜实饵黔怒百杀订菊管动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第19页页DLL的发布的发布n*.hn*.libn*.dll鼠佑拓酗各美旁严糟冬警虹休满硷薯旬彰脂谜惰遮蔬波竭愤廓貉拳酮雕琶动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第20页页DLL的使用的使用n隐式链接隐式链接n显式链接显式链接恨门韧年肛仲皋喘颇奢数梨由物颗良怪浸夺民蹬另颠畸必喷刽袒硅谋提匡动态链接库多线程文件操作注册表多媒体
13、编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第21页页n要先将要先将MyDll.dll和和MyDll.lib拷贝到某目录下面拷贝到某目录下面nWindows系统将遵循下面的搜索顺序来定位系统将遵循下面的搜索顺序来定位DLL:n1包含包含EXE文件的目录文件的目录n2进程的当前工作目录进程的当前工作目录n3Windows系统目录系统目录n4Windows目录目录n5列在列在Path环境变量中的一系列目录环境变量中的一系列目录多巨极拄娱暮咆堑奠徐裔擦咬吻肪邓百释卉树奢姨渴娃都摈迂资龋戏菊套动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线
14、程文件操作注册表多媒体编程Winsock编程第第22页页隐式链接隐式链接n_declspec(dllimport)n/*.hn#pragmacomment(lib,MyDll.lib)externC_declspec(dllimport)intMax(inta,intb);externC_declspec(dllimport)intMin(inta,intb);n/*.cppn#includeDlltest.hIntx=Min(100,200);圈葫窄招掉返沿秩吉后欢魄瘸夜讶僻蘸芽鹅蹋居锡篱散材怨碱寂民兼哼叔动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册
15、表多媒体编程Winsock编程第第23页页显式链接显式链接n显式链接是应用程序在执行过程中随时可显式链接是应用程序在执行过程中随时可以加载以加载DLL文件,也可以随时卸载文件,也可以随时卸载DLL文文件,这是隐式链接所无法作到的,所以显件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语式链接具有更好的灵活性,对于解释性语言更为合适。言更为合适。n实现显式链接要麻烦一些。实现显式链接要麻烦一些。极徽诬寡康逆仑榜起匪镁为炙芽命吴谣式猫菏灯药颊挣烟啡么耿奖墙削鼻动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第
16、第24页页跟显式链接相关的函数跟显式链接相关的函数nHINSTANCE LoadLibrary( LPCTSTR lpLibFileName);nFARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName);nBOOL FreeLibrary( HMODULE hLibModule); 蚂仪糟咎擎吉拎掀您茫侠高修志名实就裳艘篆充焰蝇沁坎项痢痊谴枪挺舟动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第25页页ntypedefint(*pMax)(inta,intb);n
17、typedefint(*pMin)(inta,intb);nHINSTANCEhDLL;npMaxMax;nhDLL=LoadLibrary(Win32DLL.dll);/加载动态链接库加载动态链接库Win32DLL.dll文件;文件;nif(!hDLL)nnMessageBox(装入动态链接库失败装入动态链接库失败!);nreturn;nnMax=(pMax)GetProcAddress(hDLL,Max);nif(!Max)nnMessageBox(获取函数地址失败获取函数地址失败!);nreturn;nnintA=Max(5,8);nCStringx;nx.Format(较大数是较大数是
18、%d!,A);nMessageBox(x);nif(!FreeLibrary(hDLL)/卸载卸载Win32DLL.dll文件;文件;nMessageBox(关闭关闭Win32DLL.dll失败失败);畅望埠听拙乍梦吴辰跃讹下倚晕珍骏偷孰口痊蚂勋吃瑟刘肥颠练寂丛椒补动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第26页页n使用显式链接应用程序编译时不需要使用使用显式链接应用程序编译时不需要使用相应的相应的Lib文件文件n关键字关键字typedef,定义指向和,定义指向和DLL中相同中相同的函数原型指针的函数原型指针nGet
19、ProcAddress(hDLL,“Min”)改为改为nGetProcAddress(hDLL,MAKEINTRESOURCE(2)阵己悬纪遂涯总航禹堡批冤稳摸忙畏妥洞孤惶倾卫学馆错室发妄侄们每舟动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第27页页ndumpbinnusage:DUMPBINoptionsfilesnoptions:n/ALLn/ARCHn/ARCHIVEMEMBERSn/DEPENDENTSn/DIRECTIVESn/DISASMn/EXPORTSn/FPOn/HEADERSn/IMPORTSn/LI
20、NENUMBERSn/LINKERMEMBER:1|2n/LOADCONFIGn/OUT:filenamen/PDATAn/RAWDATA:NONE|BYTES|SHORTS|LONGS,#n/RELOCATIONSn/SECTION:namen/SUMMARYn/SYMBOLS辟汕魔惭抛骂纷衡讹裔糠卞也埂殷止铜级溜郸彤鬃砌吓蛛惯粱闺契凭薛蔬动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第28页页nDLL的概述的概述nDLL的创建的创建nDLL的使用的使用炔厂氦豪隧崭谷儿匡抱山刑友试侯羔每懊绣带碰踪烬怒挖政必苯聚惰俱柴动态
21、链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第29页页第12讲 多线程扩特饱死红挤筷讹骄皆审鸟趋曳刮祈稠操酸享身恫搂定缠边粥疽邱矮肥酬动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第30页页n程序程序Programn进程进程Processn线程线程Thread瓜吨陶遁乓皂炭垦侮肪刘仪乱邦诉刹堂拯载拘掀凳驮泄孪酒宏搅设闯趴竹动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第31页页线程的
22、创建线程的创建nHANDLECreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,/pointertosecurityattributesDWORD dwStackSize,/initialthreadstacksizeLPTHREAD_START_ROUTINE lpStartAddress,/pointertothreadfunctionLPVOID lpParameter,/argumentfornewthreadDWORD dwCreationFlags,/creationflagsLPDWORD lpThreadId/pointe
23、rtoreceivethreadID);渔陈厩劝拎钮稳述惕境级赠百疆茂炙梁拧滤鹰硬重杭嵌创瞄珠七携介程撕动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第32页页线程的终止线程的终止nVOIDExitThread(DWORD dwExitCode/exitcodeforthisthread);HANDLEGetCurrentProcess(VOID)nBOOLTerminateThread(HANDLE hThread,/handletothethreadDWORD dwExitCode/exitcodeforthethre
24、ad);抬任逸梁泳棘豪隋蔼焙食眠腆方传秩拟硬霜咎蔚愚律牢纶锡寥刃蛆牺廉堕动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第33页页线程的挂起线程的挂起nDWORDSuspendThread(HANDLE hThread/handletothethread);襟日料滨巫乃硷讣落研烬拽撑如铰佰搏甲旭秉乞桂援锋屯佩嫁谅佑楼蛹破动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第34页页线程的恢复线程的恢复nDWORDResumeThread(HANDLE hThr
25、ead/identifiesthreadtorestart);启砍袍泌蜀瘴委耳蛤绑泻记塌撕傀郴硷氦威斧左菜铁擎垦眩秽羌渠闹粘膏动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第35页页线程类线程类nCWinThread无恩椰反述郁葛随菌芋掸佰狐凌幂冯膛帅梧夜架灸厢虫奸更祭陪稍术耸廷动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第36页页第13讲 文件操作桐奉囤粥耻蒲塑阎愉零来媚引蓝胞求粤摄墓柒杏余微阿酞胞注且入直锋尸动态链接库多线程文件操作注册表多媒体编
26、程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第37页页n文本文件文本文件n二进制文件二进制文件册攘赚曹垫贼柬锐制啮舟郁维炽计魔诣醛擂必蹦泄淬鸽帆戈硅渡绣邱甭芥动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第38页页n1.BMP文件组成文件组成nBMP文件由文件头、位图信息头、颜色信息和图形数据四部文件由文件头、位图信息头、颜色信息和图形数据四部分组成。文件头主要包含文件的大小、文件类型、图像数据偏离文分组成。文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包
27、含图象的尺寸信息、图像用几个件头的长度等信息;位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜息。颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有这一块信息,也就不需要操作调个比特来表示,文件中就没有这一块信息,也就不需要操作调色板。文件中的数据块表示图像的相应的像素值,需要注意的是:
28、色板。文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在说,在BMP文件中首先存放的是图像的最后一行像素,最后才存文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要读者朋友关注的细节是:文件存边的的顺序存储的;另外一个需要读者朋友关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为储图像的每一行像素值时,如果
29、存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补的倍数,则正常存储,否则,需要在后端补0,凑足,凑足4的倍数。的倍数。匠配峭净笋沤佳涪农萄桂吟叛婚寿吏傻邹摈俏忿包歉肺塌掳叉窒桔法纷泉动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第39页页n2.BMP文件头文件头nBMP文件头数据结构含有文件头数据结构含有BMP文件的类型、文件大文件的类型、文件大小和位图起始位置等信息。其结构定义如下小和位图起始位置等信息。其结构定义如下:ntypedefstructtagBITMAPFILEHEADERWORDbfTy
30、pe;/位图文件的类型,必须为位图文件的类型,必须为BMDWORDbfSize;/位图文件的大小,以字节为单位位图文件的大小,以字节为单位WORDbfReserved1;/位图文件保留字,必须为位图文件保留字,必须为0WORDbfReserved2;/位图文件保留字,必须为位图文件保留字,必须为0DWORDbfOffBits;/位图数据的起始位置,以相对位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位于位图文件头的偏移量表示,以字节为单位BITMAPFILEHEADER;该结构占据;该结构占据14个字节。个字节。赁施庞棕梅甲洋蓟检炽倒阳合角脱稼摈霹谦织嘴薯僚侍荐文闽职虚绚分狱动
31、态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第40页页n3.位图信息头位图信息头nBMP位图信息头数据用于说明位图的尺寸等信息。其结构如下:位图信息头数据用于说明位图的尺寸等信息。其结构如下:ntypedefstructtagBITMAPINFOHEADERDWORDbiSize;/本结构所占用字节数本结构所占用字节数LONGbiWidth;/位图的宽度,以像素为单位位图的宽度,以像素为单位LONGbiHeight;/位图的高度,以像素为单位位图的高度,以像素为单位WORDbiPlanes;/目标设备的平面数不清,必须为目
32、标设备的平面数不清,必须为1WORDbiBitCount/每个像素所需的位数,必须是每个像素所需的位数,必须是1(双色双色),4(16色色),8(256色色)或或24(真彩色真彩色)之一之一DWORDbiCompression;/位图压缩类型,必须是位图压缩类型,必须是0(不压缩不压缩),1(BI_RLE8压缩压缩类型类型)或或2(BI_RLE4压缩类型压缩类型)之一之一DWORDbiSizeImage;/位图的大小,以字节为单位位图的大小,以字节为单位LONGbiXPelsPerMeter;/位图水平分辨率,每米像素数位图水平分辨率,每米像素数LONGbiYPelsPerMeter;/位图垂
33、直分辨率,每米像素数位图垂直分辨率,每米像素数DWORDbiClrUsed;/位图实际使用的颜色表中的颜色数位图实际使用的颜色表中的颜色数DWORDbiClrImportant;/位图显示过程中重要的颜色数位图显示过程中重要的颜色数BITMAPINFOHEADER;该结构占据;该结构占据40个字节。个字节。n注意:对于注意:对于BMP文件格式,在处理单色图像和真彩色图像的时候,无论图象数文件格式,在处理单色图像和真彩色图像的时候,无论图象数据多么庞大,都不对图象数据进行任何压缩处理,一般情况下,如果位图采用压缩据多么庞大,都不对图象数据进行任何压缩处理,一般情况下,如果位图采用压缩格式,那么格
34、式,那么16色图像采用色图像采用RLE4压缩算法,压缩算法,256色图像采用色图像采用RLE8压缩算法。压缩算法。浙碰侥说养突洽麦洋搭西船漳奠击智肘愉谚跌赣胖丰旗贱妇娄涪侨助辊征动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第41页页n4.颜色表颜色表n颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结类型的结构,定义一种颜色。构,定义一种颜色。RGBQUAD结构的定义如下结构的定义如下:ntypedefstructtagRGBQU
35、ADBYTErgbBlue;/蓝色的亮度蓝色的亮度(值范围为值范围为0-255)BYTErgbGreen;/绿色的亮度绿色的亮度(值范围为值范围为0-255)BYTErgbRed;/红色的亮度红色的亮度(值范围为值范围为0-255)BYTErgbReserved;/保留,必须为保留,必须为0RGBQUAD;n颜色表中颜色表中RGBQUAD结构数据的个数由结构数据的个数由BITMAPINFOHEADER中的中的biBitCount项来确定,项来确定,当当biBitCount=1,4,8时,分别有时,分别有2,16,256个颜色表项,当个颜色表项,当biBitCount=24时,图像为真彩色,时,
36、图像为真彩色,图像中每个像素的颜色用三个字节表示,分别对应图像中每个像素的颜色用三个字节表示,分别对应R、G、B值,图像文件没有颜色表项。位图值,图像文件没有颜色表项。位图信息头和颜色表组成位图信息,信息头和颜色表组成位图信息,BITMAPINFO结构定义如下结构定义如下:ntypedefstructtagBITMAPINFOBITMAPINFOHEADERbmiHeader;/位图信息头位图信息头RGBQUADbmiColors1;/颜色表颜色表BITMAPINFO;n注意:注意:RGBQUAD数据结构中,增加了一个保留字段数据结构中,增加了一个保留字段rgbReserved,它不代表任何颜
37、色,它不代表任何颜色,必须取固定的值为必须取固定的值为0,同时,同时,RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,既:若某个位图中的一个像素点的顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,既:若某个位图中的一个像素点的颜色的描述为颜色的描述为00,00,ff,00,则表示该点为红色,而不是蓝色。,则表示该点为红色,而不是蓝色。挚减电抱筒榷吭展锌美梯睁皿等喜司融球距收原呛笼去免调控缚救拦融徽动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多
38、媒体编程Winsock编程第第42页页n5.位图数据位图数据n位图数据记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记位图数据记录了位图的每一个像素值或该对应像素的颜色表的索引值,图像记录顺序是在扫描行内是从左到右录顺序是在扫描行内是从左到右,扫描行之间是从下到上。这种格式我们又称为扫描行之间是从下到上。这种格式我们又称为Bottom_Up位图,当然与之相对的还有位图,当然与之相对的还有Up_Down形式的位图,它的记录顺序是形式的位图,它的记录顺序是从上到下的,对于这种形式的位图,也不存在压缩形式。位图的一个像素值所占的从上到下的,对于这种形式的位图,也不存在压缩形式。位图的一个
39、像素值所占的字节数:当字节数:当biBitCount=1时,时,8个像素占个像素占1个字节;当个字节;当biBitCount=4时,时,2个像个像素占素占1个字节;当个字节;当biBitCount=8时,时,1个像素占个像素占1个字节;当个字节;当biBitCount=24时时,1个像素占个像素占3个字节,此时图像为真彩色图像。当图像不是为真彩色时,图像文件个字节,此时图像为真彩色图像。当图像不是为真彩色时,图像文件中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色中包含颜色表,位图的数据表示对应像素点在颜色表中相应的索引值,当为真彩色时,每一个像素用三个字节表示图像相应
40、像素点彩色值,每个字节分别对应时,每一个像素用三个字节表示图像相应像素点彩色值,每个字节分别对应R、G、B分量的值,这时候图像文件中没有颜色表。上面我已经讲过了,分量的值,这时候图像文件中没有颜色表。上面我已经讲过了,Windows规定图规定图像文件中一个扫描行所占的字节数必须是像文件中一个扫描行所占的字节数必须是4的倍数的倍数(即以字为单位即以字为单位),不足的以不足的以0填充,填充,图像文件中一个扫描行所占的字节数计算方法:图像文件中一个扫描行所占的字节数计算方法:nDataSizePerLine=(biWidth*biBitCount+31)/8;/一个扫描行所占的字节一个扫描行所占的字
41、节数数n位图数据的大小按下式计算位图数据的大小按下式计算(不压缩情况下不压缩情况下):nDataSize=DataSizePerLine*biHeight。n上述是上述是BMP文件格式的说明,搞清楚了以上的结构,就可以正确的操作图像文文件格式的说明,搞清楚了以上的结构,就可以正确的操作图像文件,对它进行读或写操作了。件,对它进行读或写操作了。慕汝乍原束雷侧滦憨摘辫寓篮鸣呵旨尧苇攫城息禾钝衡挣耙吮逆口踞躯腋动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第43页页看一个位图处理的例子看一个位图处理的例子赚胎粤肚紫饥乃央半懊廊柔
42、模顽氯扬盯盲拥腺呜虐酉锅巫穗中颜膜朋绕罩动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第44页页nFILEnCFilenCStdioFile癸爸费辆决迂羡违越某峰血遣秽脖漆报凹塑冗属揽幼刹衷珍循菩昨帧归撼动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第45页页第14讲 注册表枪西离催酞配疾傣忠修佣术烩俺坡祁椰报港跳煤壶簿妆母橡悠置闰射削疵动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程
43、第第46页页n注册表的结构和作用注册表的结构和作用n注册表操作函数注册表操作函数n注册表操作实例注册表操作实例陪页顶寺恤盾皱妖添探其账多侣住底饿柯岭彼粕薄箍荔鞭坐胳享稳蔽评眷动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第47页页注册表的结构和作用注册表的结构和作用呜娄轿砒戏铜锁葛贺祭隘久醋牵卧拥捕恨伊圃揣伏策叼覆庚埃匈供甄友斗动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第48页页nHKEY_CLASS_ROOT:文件扩展名的信息文件扩展名的信息nH
44、KEY_CURRENT_USER:当前用户的信息:当前用户的信息nHKEY_LOCAL_MACHINE:本机软硬件配置:本机软硬件配置信息信息nHKEY_USERS:所有用户信息:所有用户信息nHKEY_CURRENT_CONFIG:计算机的当前:计算机的当前配置配置nHKEY_DYN_DATA:内存中的需要快速更新:内存中的需要快速更新和检索的数据和检索的数据疽蔡苏主遍给帜妓骆凶锦袱赁篱快寿扎纫沁遁富崭序绅舷化俗铀迹保党哦动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第49页页注册表操作函数注册表操作函数n打开注册表打开
45、注册表n关闭注册表关闭注册表n从注册表中取得数据从注册表中取得数据n设置注册表中的键值设置注册表中的键值n建立并打开制定的关键字建立并打开制定的关键字n枚举每一个子关键字枚举每一个子关键字篡啊侮译前睛助刚爸遵男钥舶刚森蘑武党衍楚上埔葛妹型爸港藤题召羌妒动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第50页页n打开注册表打开注册表n打开一个键的函数:打开一个键的函数:RegOpenKeyEx函数定义:函数定义:LONGRegOpenKeyEx(HKEYhKey,/已经打开的键的句柄,或者直接是上述几个根已经打开的键的句柄,或
46、者直接是上述几个根键键LPCTSTRlpSubKey,/要打开的子键名字的地址要打开的子键名字的地址DWORDulOptions,/保留值,必须为保留值,必须为0REGSAMsamDesired,/打开方式,如读还是写打开方式,如读还是写PHKEYphkResult/返回的打开的子键的句柄返回的打开的子键的句柄);事环校膛谩海漳吹曙委爹协坝茂宋缆浆因鸥崎污吵踞士清真拧间虐够耪獭动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第51页页n查询某一个键值:查询某一个键值:RegQueryValueExn函数定义:函数定义:LON
47、GRegQueryValueEx(HKEYhKey,/要查询的键的句柄要查询的键的句柄LPCTSTRlpValueName,/要查询的键值的名称要查询的键值的名称LPDWORDlpReserved,/保留值保留值LPDWORDlpType,/要查询的数据的类型要查询的数据的类型LPBYTElpData,/要返回的查询的数据要返回的查询的数据LPDWORDlpcbData/预置的数据的长度预置的数据的长度);酋祟母嗜积垦亿尉盈迄漆牙挟寄昂勾渊任帮辛惭猎褥银厉颗卒瘤擦澳约愧动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第52页
48、页n设置一个键值设置一个键值RegSetValueExn函数定义:函数定义:LONGRegSetValueEx(HKEYhKey,/要设置的键的句柄要设置的键的句柄LPCTSTRlpValueName,/要访问的键值的要访问的键值的名称名称LPDWORDlpReserved,/保留值保留值DWORDdwType,/要设置的数据的类型要设置的数据的类型constBYTE*lpData,/要设置的健值要设置的健值DWORDcbData/数据的长度数据的长度);尾乳盎讥降婴够獭黄蜘语府摄擂惺篱瓷先俯原攘遍忧孰散骋季调咨到疫滚动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文
49、件操作注册表多媒体编程Winsock编程第第53页页n关闭关闭nLONGRegCloseKey(HKEYhKey);蝎造媒胁嘛糜仙旱臂办紧蚂惑伶折葫串珠皿伎个参匈涤拂焊缮器尸觅姚柜动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第54页页例子例子圃垒孪桶尖鞘腰走析脾劲坚钎疵俱茂食院吠册帆争熏翅奠寅亩恼瑰踩棵腺动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第55页页第15讲 多媒体编程7/21/2024甘诬层暮羊迅陈宜秩怪乙适寺彼擂硷祭唐舅壬蛔摧抗麦役蔓档
50、吴侠珍帅也动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第56页页媒体控制接口媒体控制接口(MCI)nMultimediaControlInterfacenMCI在控制音频、视频等设备方面,提供了与在控制音频、视频等设备方面,提供了与设备无关的设备无关的API接口。接口。n用户应用程序可使用用户应用程序可使用MCI控制标准多媒体设备控制标准多媒体设备n不同设备其驱动控制方式不同:不同设备其驱动控制方式不同: 一些一些MCI设备驱动程序设备驱动程序(影碟机影碟机)直接控制目标设备;直接控制目标设备; 一些一些MCI设备驱动程
51、序设备驱动程序(MIDI函数函数)可使用可使用MMSYSTEM函数间接控制目标设备;函数间接控制目标设备; 还有一些还有一些MCI设备驱动程序设备驱动程序(影片演播器影片演播器)则提供了与其则提供了与其他他Windows DLL的高层接口。的高层接口。掐早商葱徐缓愧笔赢请防霜牵娶碰蔚跳称戒骨柠独晕婚晃岩莽状碱汾雪遵动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第57页页n应用程序通过设备的类型来区分设备应用程序通过设备的类型来区分设备 。n如果要通过如果要通过MCI去控制设备,必须将相应去控制设备,必须将相应的的MCI驱动
52、程序和设备的驱动程序,驱动程序和设备的驱动程序,DLL(如果需要如果需要)装入。装入。n MCI驱动程序的安装可通过驱动程序的安装可通过Windows中中的控制面板来完成。在的控制面板来完成。在Windows中中SYSTEM.INI文件中的文件中的mci部分包括部分包括了一个已安装了的设备类型表了一个已安装了的设备类型表 。抱仆哲窗员旱仿藩惋踏捕洼振囱跑粕追火造堰苦染虚冰扫摇均杨谨脓刨然动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第58页页设备类型设备类型描 述cdaudiodatdigitalvideommmovieo
53、theroverlayscannervcrvideodiscwaveaudio激光唱机、激光唱机、CD-ROM数字化磁带音频播放机数字化磁带音频播放机窗口中的数字视频窗口中的数字视频(非基于非基于GUI)多媒体影片演播器多媒体影片演播器未定义的未定义的MCI设备设备叠加设备叠加设备(窗口中的模拟视频窗口中的模拟视频)图像扫描仪图像扫描仪磁带录相机或播放机磁带录相机或播放机影碟机影碟机播放数字化波形文件的音频设备播放数字化波形文件的音频设备瑞棍怖幅爪势热寻携姨握播镣宁洪撮擦帖努咏憎熬簧各衬耗童磨喜觅胁硕动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体
54、编程Winsock编程第第59页页Windows提供的提供的MCI设备驱动程序设备驱动程序设备类型设备驱动程序名描 述cdaudiommmoviesequencervideodiscwaveaudioMCICDA.DRVMCIMMP.DRVMCISEQ.DRVMCIPIONR.DRVMCIWAVE.DRV一个播放光盘音频的一个播放光盘音频的MCI设备驱设备驱动程序动程序一个播放多媒体影片文件的一个播放多媒体影片文件的MCI设备驱动程序设备驱动程序一个播放一个播放MIDI音频文件的音频文件的MCI设设备驱动程序备驱动程序一个播放先锋一个播放先锋LD-V4200影碟机影碟机文件的文件的MCI设备驱
55、动程序设备驱动程序一个播放和记录波形音频文件的一个播放和记录波形音频文件的MCI设备驱动程序设备驱动程序蒸焦腆肉恢起喷牺嘿贼逆滨艳仿然娩归颗雏反握嘲青模佬蕉弘滩阉璃坦病动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第60页页MCIMCI命令消息接口命令消息接口nmciSendCommandnmciSendStringnmciGetDeviceIDnmciGetErrorStringnmciSetYieldProcnmciGetYieldProc筹情九约裤代婶话动宅展率膊泡怒南锚宠插剩钎姓书批豆栽贱岔刊滩压魏动态链接库多线程
56、文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第61页页mciSendCommand发送命令消息DWORD mciSendCommand(WORD DeviceID,WORD Message,DWORD Param1,DWORD Param2)nDeviceID标识一个标识一个MCI设备;设备;nMessage 标识要发出的消息,如标识要发出的消息,如MCI-OPEN等;等;nParam1 为消息指定标志;为消息指定标志;nParam2 为指定一个指向消息数据结构的指针。为指定一个指向消息数据结构的指针。n该函数调用如果成功返回该函数调用
57、如果成功返回0,否则返回一个错误代码,否则返回一个错误代码, mciGetErrorString 可获得对这个错误的文本描述。可获得对这个错误的文本描述。港略杏橙明捏刘位韶煤跟酚惫诀巴防徽渐件第废迸敛肯渴欧蜗补柳脑侗溃动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第62页页MCI命令消息分类命令消息分类n直接由直接由MCI解释的命令解释的命令n由所有的由所有的MCI设备所支持的命令设备所支持的命令n基本命令基本命令 n扩展命令扩展命令筒囚佩州麦充噪达芋抛怔旗末扰沦痢尝矢窍者卖硝览巨嗅始深酬入刻醋恶动态链接库多线程文件操作注
58、册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第63页页直接由直接由MCI解释的命令解释的命令消 息描 述MCI-SYSINFOMCI-BREAKMCI-SOUND 返回有关返回有关MCI设备的信息设备的信息为指定的为指定的MCI设备设置一个中止键设备设置一个中止键播放一段在播放一段在WIN.INI文件中的文件中的Sounds部分所指定的系统声音部分所指定的系统声音 哩润雕古镇搐哆勘旺齐寨竞泽褥次鹏贴戮掏柠粱鹃苔鳃看贪澳曰塘指股核动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第
59、64页页所有的所有的MCI设备支持的命令消息设备支持的命令消息消 息描 述MCI-CLOSEMCI-GETDEVCAPSMCI-INFOMCI-OPENMCI-STATUS 关闭一个关闭一个MCI设备设备获得一个获得一个MCI设备的性能设备的性能从一个从一个MCI设备中得到有关的信设备中得到有关的信息息初始化一个初始化一个MCI设备设备从一个从一个MCI设备返回有关的状态设备返回有关的状态信息信息 降嫉辅鹿霖睫匈乞哼丽蚊依氨让暮廷磅料推途吞蜕惫芦烯子奥他君罚茅桶动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第65页页基本命
60、令消息基本命令消息消 息描 述MCI_LOADMCI_PAUSEMCI_PLAYMCI_RECORDMCI_RESUMEMCI_SAVEMCI_SEEKMCI_SETMCI_STATUSMCI_STOP 从一个磁盘文件加载数据从一个磁盘文件加载数据暂停播放或记录暂停播放或记录开始传送输出数据开始传送输出数据开始传送输入数据开始传送输入数据重新开始播放或记录重新开始播放或记录将数据存储到磁盘文件中将数据存储到磁盘文件中向前或向后检索向前或向后检索设置设备信息设置设备信息从一个从一个MCI设备返回有关的状态信息停止设备返回有关的状态信息停止播放或记录播放或记录依肾锭雕摘都缮艰滔侨话宗竿电搞艳套柒戎
61、珍汁肾菲谨耸烬目鱼健题张实动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第66页页使用多媒体设备的基本步骤使用多媒体设备的基本步骤n打开打开MCI_OPENn设置或获取设置或获取MCI_SETMCI_STATUSn操作操作MCI_XXXn关闭关闭MCI_CLOSE盒铅屹诞膨庐末另荡茶筐灯笋沮腋巫蒙赦泻博徊赁益犯启沛减讶颈劲褂杭动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第67页页打开一个设备打开一个设备n使用设备之前,必须使用使用设备之前,必须使用M
62、CI_OPEN命令消息命令消息来初始化该设备来初始化该设备n打开打开MCI设备的方法有以下几种:设备的方法有以下几种:n(1)用设备类型字符串指定待打开的用设备类型字符串指定待打开的MCI设备设备n(2)用用MCI设备驱动程序名指定待打开的设备驱动程序名指定待打开的MCI设备设备n(3)用设备类型常数用设备类型常数(见下表见下表)指定待打开的指定待打开的MCI设备设备n(4)仅用设备元素指定打开的复合设备仅用设备元素指定打开的复合设备 臭施凌罪饵鲁牢批双颤踏贺榷驾预诣援汽畅须舆橇淋棒汕浆录铅扫玫谅撰动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编
63、程Winsock编程第第68页页设备类型及常数设备类型及常数设备类型常 数animationcdaudiodatdigitalvideootheroverlayscannervcrsequencervideodiscwaveaudioMCI_DEVTYPE_ANIMATIONMCI_DEVTYPE_CD_AUDIOMCI_DEVTYPE_DATMCI_DEVTYPE_DIGITAL_VIDEOMCI_DEVTYPE_OTHERMCI_DEVTYPE_OVERLAYMCI_DEVTYPE_SCANNERMCI_DEVTYPE_VIDEOTAPEMCI_DEVTYPE_SEQUENCERMCI_D
64、EVTYPE_VIDEODISCMCI_DEVTYPE_WAVEFORM_AUDIO点还载幼还播脉饵干跋隋慧菩肌秦驹送稿界芝喷汛冈蠕匝啊轿榔肋倘后走动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第69页页例如:打开一个例如:打开一个CD设备设备n/打开设备打开设备nMCI_OPEN_PARMSOpenParms;nOpenParms.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_CD_AUDIO;nOpenParms.wDeviceID=0;nif(mciSendCommand(NULL,MCI_
65、OPEN,MCI_WAIT|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_SHAREABLE,(DWORD)(LPVOID)&OpenParms)nreturnFALSE;nm_wDeviceID=OpenParms.wDeviceID;砸君松赏蔓柱冤竣再敞敲烦岔监痹线维尖粉拔右排磐每横倪霄从桨阵代流动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第70页页MCI_OPEN_PARMS结构结构ntypedefstructtagMCI_OPEN_PARMSAnDWORDdwCallback;n
66、MCIDEVICEIDwDeviceID;nLPCSTRlpstrDeviceType;nLPCSTRlpstrElementName;nLPCSTRlpstrAlias;nMCI_OPEN_PARMS;芳逢镶鸦琴乏秧首箭缆爆玉拌劲水均篡阜讳胖叶巢胎萄牧骗脓鹰揽微筋巧动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第71页页关闭一个设备关闭一个设备nMCI_CLOSE命令消息取消对一个设备或命令消息取消对一个设备或者设备元素的访问,它类似于一个文件的者设备元素的访问,它类似于一个文件的关闭操作。关闭操作。n为了有助为了有助M
67、CI管理设备,应用程序在它使管理设备,应用程序在它使用完这个设备之后,应该明确地关闭它所用完这个设备之后,应该明确地关闭它所使用过的每一个设备或者设备元素使用过的每一个设备或者设备元素。垢执侨毁溜撵扁蝶拆牧嵌郡桶悬找梗赊胀诚渊颤虽僻板讽窒挤尧吟律瓤树动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第72页页关闭设备关闭设备nmciSendCommand(m_wDeviceID,MCI_CLOSE,MCI_WAIT,NULL);峭杜芜以匀悔培逻旦檄奇糖哮劝毕骆奸穿攒忠涨契崭貌蚂谎乓攫午穷便派动态链接库多线程文件操作注册表多媒体
68、编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第73页页命令字符串接口一个操作用一个字符串描述命令字符串接口一个操作用一个字符串描述使用命令字符串接口使用命令字符串接口3个函数个函数:nmciSendString向一个向一个MCI设备驱动程序发送一个命设备驱动程序发送一个命令字符串。这个函数同时也具有对于回调函数和返令字符串。这个函数同时也具有对于回调函数和返回字符串的参数。回字符串的参数。nmciGetErrorString返回一个同错误代码相对应的错返回一个同错误代码相对应的错误字符串。误字符串。nmciExecute向一个向一个MCI设备驱动程序发送一
69、个命令设备驱动程序发送一个命令字符串。字符串。照昏琶窝垂樊俄略律痰符鸽篮桨碑梅赢张咒嫂碴亢酱塌互口谆过拘胶必慢动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第74页页以上是管理多媒体设备的基本命令以上是管理多媒体设备的基本命令下面来看一看下面来看一看CD播放器的开发播放器的开发n简单方法简单方法VisualBasicn复杂方法复杂方法VisualC+嚣海咬擎羡度气恋悄隐悟棺喳彼久碧记们辙车螺心淀郎箔诉掏个肃傣碑旧动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock
70、编程第第75页页第16讲 Winsock编程7/21/2024沏窗沥葫晦努豺陋炮糠四惋坟毯疟肪号腥烁注溢睛冤翌浮旧维统只嘴件揩动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第76页页nSOCKET简介简介n基于基于WINDOWSSOCKET的应用开发介的应用开发介绍绍nWINSOCKAPI主要函数简介主要函数简介n聊天应用程序的设计说明聊天应用程序的设计说明n服务器端服务器端n客户端客户端梅疫玻澜让岿扳冤汪庇戌飘哨氯寒蓑焦轻共纬铅信挽泛爵瓷竹诲算八掐蓖动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线
71、程文件操作注册表多媒体编程Winsock编程第第77页页SOCKET简介简介n进程间通信方式进程间通信方式n80年代初,美国政府的高级研究工程机构年代初,美国政府的高级研究工程机构(ARPA)给加利福尼亚大)给加利福尼亚大学学Berkeley分校提分校提供了资金,让他们在供了资金,让他们在UNIX操作系统下实现操作系统下实现TCP/IP协议。协议。n研究人员为研究人员为TCP/IP网络通信开发了一个网络通信开发了一个API。这个这个API称为称为Socket接口(套接字)。今天,接口(套接字)。今天,SOCKET接口接口是是TCP/IP网络最为通用的网络最为通用的API,也是在也是在INTER
72、NET上进行应用开发最为通上进行应用开发最为通用的用的API。恃晴炊以叼砧毡匡脸才惫晕逐坝毒哨绷潭干懂敝极沼涎急奥蛰燎泉瞎咕绢动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第78页页n90年代初,由年代初,由Microsoft联合了其他几家联合了其他几家公司共同公司共同制定了一套制定了一套WINDOWS下的网下的网络编程接口,即络编程接口,即WindowsSockets规范。规范。n从从1991年的年的1.0版到版到1995年的年的2.0.8版,版,经过不断完善并在经过不断完善并在Intel、Microsoft、Sun、S
73、GI、Informix、Novell等公司等公司的全力支持下,已成的全力支持下,已成为为Windows网络编网络编程的事实上的标准。程的事实上的标准。缚特掳叁宾咎朱迫蚕哈换逝咏涩婶凿肺再写碑疲迹积领琶告衬砒世税畔警动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第79页页n在实际应用中的在实际应用中的WINDOWSSOKCETS规范主规范主要有要有1.1版和版和2.2版。两者的最重要区别是版。两者的最重要区别是1.1版版只支持只支持TCP/IP协议,而协议,而2.2版可以支持多协议。版可以支持多协议。nSOCKET实际在计算
74、机中提供了一个通信端口,实际在计算机中提供了一个通信端口,可以通过这个端口可以通过这个端口与任何一个具有与任何一个具有SOCKET接接口的计算机通信。应用程序在网络上传输,接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个收的信息都通过这个SOCKET接口来实现。在接口来实现。在应用开发中就像使用文件句应用开发中就像使用文件句柄一样,可以对柄一样,可以对SOCKET句柄进行读写操作。句柄进行读写操作。拜何扎瑞哩梁州橱绎腔时阮贮胀聂圈石鞭帖幼蚊虎展症归笺鸳妙笆砒碍秸动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第8
75、0页页平台平台Winsock版本版本nWindows951.1(2.2)nWindows982.2nWindowsNT4.02.2nWindows20002.2旅琼仁隔政沤于俞傍规砌蒂食珊聋期辨胖十漓粕西挪涨起渊载滓哈登续曼动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第81页页基于基于WINDOWSSOCKET的应用开发介绍的应用开发介绍n在在WINDOWS系统中进行系统中进行WINSOCK开开发使用的编程语言有很多,发使用的编程语言有很多,VC+,JAVA,DELPHI,VB等。等。nVC+用得较多用得较多,跟跟Win
76、Socket联系最紧联系最紧密密流涵簿彬攀懂刀参憾特毕淌锡竭坐踪朱蜜皂椒啸铺里俐者蹲蛤曾疙鲸琢矣动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第82页页MFC对对WinSocket的封装的封装nCAsynSocketnCsocketnCSocketFile等等劣防褪剖油稀崭兵屏屠讶阔诱廓凉菏贰绑狮合充绥橱柞鲜能梢蹋掸卤碧佰动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第83页页WinSocketAPIn在在VC中进行中进行WINSOCK的的API编程开
77、发,需要使编程开发,需要使用到下面三个文件:用到下面三个文件:nWINSOCK.H:这是这是WINSOCKAPI的头文件。的头文件。nWSOCK32.LIB:WINSOCKAPI连接库文件。连接库文件。在使用中,要把它作为项目在使用中,要把它作为项目的非缺省的连接库的非缺省的连接库包含到项目文件中去。包含到项目文件中去。nWINSOCK.DLL:WINSOCK的动态连接库,位的动态连接库,位于于WINDOWS的安装目录下。的安装目录下。咐续巩煌撤公剔柄铺肌蛙休箕呜醛萝台喷厂梯钉破毁纪毖戎丁易疟煞酷隐动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编
78、程Winsock编程第第84页页服务器服务器/客户机客户机n面向连接的、可靠的面向连接的、可靠的(TCP)n无连接的、不可靠的无连接的、不可靠的(UDP)n一般在使用中,面向连接协议的一般在使用中,面向连接协议的SOCKET编程模型应用最为广泛,因编程模型应用最为广泛,因为面向连接为面向连接协议提供了一系列的数据纠错功能,可以协议提供了一系列的数据纠错功能,可以保证在网络上传输保证在网络上传输的数据及时、无误地的数据及时、无误地到达对方。到达对方。馅枯春蚁瓦雁睬锯嘶偏悯娩耕各廖和分揉皋捐诗邢侗默续偏电捏掂廉缠补动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注
79、册表多媒体编程Winsock编程第第85页页面向连接的协议面向连接的协议Socket模型模型烂男相茫躁侣昌疲陋葱寨缴叉乓傅啼舱畴省疆烈妨化携慈塌颜礁暴楼蝶秀动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第86页页面向无连接的协议面向无连接的协议Socket模型模型冲佳予刻晰财铸吊张离盆酉葛沃苹拔掏褐鸭好钡敷涅护衷存疲肪秧护组韵动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第87页页n使用使用SOCKET接口(面向连接或无连接)进行接口(面向连接或无连接
80、)进行网络通信时,网络通信时,必须按下面的四步进行处理:必须按下面的四步进行处理:n1、程序必须建立一个、程序必须建立一个SOCKET。n2、程序必须按要求配置此、程序必须按要求配置此SOCKET。也就是。也就是说,程序要么将此说,程序要么将此SOCKET连接到远方的主机连接到远方的主机上,要么给此上,要么给此SOCKET指定一个指定一个本地协议端口。本地协议端口。n3、程序必须按要求通过此、程序必须按要求通过此SOCKET发送和接发送和接收数据。收数据。n4、程序必须关闭此、程序必须关闭此SOCKET。罩讼陶曹触尉洽缀棋叁逗锗畸停椎径坚争龟寂梦刃候皖癣霉个洁桑歌眩甚动态链接库多线程文件操作注
81、册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第88页页WINSOCKAPI主要函数简介主要函数简介nWSAStartupnWSACleanupnsocketnclosesocketnbindnlistennacceptnconnectnrecvrecvfromnsendsendto擞遵偿标赖泥噬廊辊庚潍扒竟嫉浦仆唁焰宇完肘尹擂俺汝镍修抵呢祈惋葛动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第89页页WSAStartupn连结应用程序与连结应用程序与WindowsSockets
82、DLL的第一个函数的第一个函数n此函数是应用程序调用此函数是应用程序调用WindowsSocketsDLL函数中的第一个,此函数调函数中的第一个,此函数调用成功后,才可以再调用其他用成功后,才可以再调用其他WindowsSocketsDLL的函数。的函数。剩养揉徘肚唉亥邹公顷臂食枪够壶箔谩寄雪蛆公锨嫂继邱芹股肖拒玖凉刀动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第90页页nint WSAStartup ( WORD wVersionRequested, LPWSADATA lpWSAData );nwVersionReq
83、uested 是是WinSocketAPI提供的调用方可使用的最高版本号,提供的调用方可使用的最高版本号,高字节是副版本号,低字节是主版本号高字节是副版本号,低字节是主版本号nlpWSAData 是指向是指向WSADATA的指针,的指针,用来接收用来接收Socket的实现细节的实现细节爵歉挖爷霓坯迅葡骤饲旧驭负俺透狞滓辩摩忘灼醋芋番豺苦其银紫碧冗凉动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第91页页WSACleanupn结束结束WindowsSocketsDLL的使用的使用n当应用程序不再需要使用当应用程序不再需要使用
84、WindowsSocketsDLL时,须调用此函数来注销使时,须调用此函数来注销使用,以便释放其占用的资源。用,以便释放其占用的资源。nintWSACleanup();吨占割尊变励伎犊初凋翌拦双锡肮坷纂辆挣苑酉神鉴冗句裤恼靠夺泉猖娱动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第92页页socketnSOCKET socket ( int af, int type, int protocol );naf为为PF_INET,表示互联网协议组,表示互联网协议组ntype,套接字的类型,套接字的类型nSOCK_STREAMnSO
85、CK_DGRAMnprotocol,套接字所使用的协议套接字所使用的协议僵瘴域勘遵茁氛昼锚杉亦猩联斗豁肤闰拇赚挝嫉腾牵蒂婉躯咀赃谎标摊颖动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第93页页closesocketnint closesocket ( SOCKET s );桐慰辩蚊疆综殖讶终氖复模逐瘴除习皆酉侯讫炊傻确泰授携适盅奇境泻涣动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第94页页bindnint bind ( SOCKET s, const
86、 struct sockaddr FAR* name, int namelen );n一旦为某种特定协议创建了套接字,就必一旦为某种特定协议创建了套接字,就必须将套接字绑定到一个已知地址。须将套接字绑定到一个已知地址。bind函数可将指定的套接字同一个已知地址绑函数可将指定的套接字同一个已知地址绑定到一起。定到一起。卷计悸懂紫烬墙冷碉型钝孽敲砸侣额占译跃辖锣董袋蘸驾昌蚂锋既轩淋塑动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第95页页叫被淋享残拔履羡赁割徊井船眯酿翼紫腺者燕逊怔镶瑚刹碾莉桨掉毒导嫉动态链接库多线程文件操作注
87、册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第96页页acceptnSOCKET accept ( SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen );n服务器接收客户的连接请求,在建立好服务器接收客户的连接请求,在建立好输入队列以后,服务器就调用输入队列以后,服务器就调用accept,然后进入休眠状态,等待用户的连接请求然后进入休眠状态,等待用户的连接请求沙铭遣碎杏抓喝厩抑铱建凯粉楼醚耪珍甲妇绞溺拄蛹凿盆伦俐又新吸梯患动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库
88、多线程文件操作注册表多媒体编程Winsock编程第第97页页connectnint connect ( SOCKET s, const struct sockaddr FAR* name, int namelen );n要求连接某一要求连接某一Socket到指定的网络上服到指定的网络上服务端。务端。n此函数用在客户端,用来向服务端要求建此函数用在客户端,用来向服务端要求建立连接。当连接建立完成后,客户端即可立连接。当连接建立完成后,客户端即可利用此利用此Socket来与服务端进行信息传递。来与服务端进行信息传递。叭丛撮酚股凶葱刽嚏腻产爹焰像怕婉锣犹堵辱砌浸督陆大果翟攻徊堂卓罪动态链接库多线程文
89、件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第98页页recvrecvfromnint recv ( SOCKET s, char FAR* buf, int len, int flags );nint recvfrom ( SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR* from, int FAR* fromlen );他瓷汝兔佃动犬我煌芜磋枉溜俘筛味蕴坏筏丝扼衙卡镰啦骋强矽赋族孺汪动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线
90、程文件操作注册表多媒体编程Winsock编程第第99页页sendsendtonint send ( SOCKET s, const char FAR * buf, int len, int flags );nint sendto ( SOCKET s, const char FAR * buf, int len, int flags, const struct sockaddr FAR * to, int tolen );柞巩以礁仙亩彰怕骏剖抖韶寺座摈颓爹旧医获扬委性榜邵空都惕驾列屏格动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程第第100页页看例子看例子n聊天程序聊天程序n服务器服务器/客户机客户机nServer/Clientn面向连接的面向连接的(TCP)酞楚转抹毋抢梦萎经饺虐柜岗荡谊夹甚落垄矣唇咸伺豁医度祖加叶文谆庚动态链接库多线程文件操作注册表多媒体编程Winsock编程动态链接库多线程文件操作注册表多媒体编程Winsock编程