动态链接库多线程文件操作注册表多媒体编程Winsock编程.ppt
《动态链接库多线程文件操作注册表多媒体编程Winsock编程.ppt》由会员分享,可在线阅读,更多相关《动态链接库多线程文件操作注册表多媒体编程Winsock编程.ppt(100页珍藏版)》请在三一文库上搜索。
1、,动态链接库 多线程 文件操作 注册表 多媒体编程 Winsock编程(网络编程) 数据库,第11讲 动态链接库,2019年4月12日星期五,动态链接库的基本概念 动态链接库的创建 动态链接库的使用,动态链接库的基本概念,动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的。 几乎所有的Windows API都包含在DLL中 是可执行文件,它包含函数,数据或资源等其他应用程序可用到的东西 它可以在需要的时候随时装入, 在装入时或运行时,自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上W
2、indows操作系统中几乎所有的内容都由DLL以一种或另外一种形式代表着。 显示的字体和图标存储在GDI.DLL中 显示Windows桌面和处理用户的输入所需要的代码被存储在一个User.DLL中 Windows编程所需要的大量的API函数也被包含在Kernel.DLL中,静态链接库,多个应用程序,多个静态链接库的副本 占用较多的内存资源 在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB) Visual C+的编译器在处理程序代码时将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件,“静态链接“,此时因为应用程序所需的全部内容都是从库中
3、复制了出来,所以静态库本身并不需要与可执行文件一起发行,DLL可在函数调用其中的函数时,才被装入内存 DLL在内存中的一个副本可供多个应用程序使用 减少了内存和磁盘空间 DLL是包含若干函数、类或资源的库文件 函数和数据被存储在一个DLL上 ,可供其它DLL或应用程序使用,DLL的优点,共享DLL,节省内存,减少动态交换 不同程序设计语言之间可以共享DLL 减少可执行代码大小 重用代码 大工程可分为易管理的小工程 实现新功能更容易、软件升级,在动态库的情况下,有两个文件 引入库(.LIB)文件 DLL文件 引入库文件包含被DLL导出的函数的名称和位置 DLL包含实际的函数和数据 应用程序使用L
4、IB文件链接到所需要使用的DLL文件,动态链接库的创建,Win32 Dynamic-Link Library方式 使用导出函数关键字_declspec(dllexport)创建 用.def文件创建 微软的Visual C+支持三种DLL Non-MFC Dll(非MFC动态库) Regular Dll(常规DLL) Extension Dll(扩展DLL),Win32 Dynamic-Link Library方式,(1)使用导出函数关键字_declspec(dllexport)创建 /Win32DLL.h extern “C“ _declspec(dllexport) int Max(int
5、a, int b); extern “C“ _declspec(dllexport) int Min(int a, int b); /Win32DLL.cpp #include“Win32DLL.h“ int Max(int a, int b) return (a=b)?a:b; int Min(int a, int b) return (a=b)?a:b; ,查看Debug目录,生成了两个文件 Win32DLL.dll Win32DLL.lib,(2)用.def文件创建 删除头文件和实现文件中的包含部分 建立一个新文本文件Win32DLL_DEF.def,DEF文件的格式 LIBRARY W
6、in32DLL_Def EXPORTS Max :Max1 Min :Min2,实现文件 /Win32DLL_DEF.cpp int Max(int a, int b) return (a=b)?a:b; int Min(int a, int b) return (a=b)?a:b; ,MFC AppWizarddll方式生成常规/扩展DLL 常规DLL静态链接到MFC 常规DLL动态链接到MFC MFC扩展DLL,MFC生成框架 可以使用MFC类 其它与Non-MFC大同小异,DLL的发布,*.h *.lib *.dll,DLL的使用,隐式链接 显式链接,要先将MyDll.dll和MyDll
7、.lib拷贝到某目录下面 Windows系统将遵循下面的搜索顺序来定位DLL: 1包含EXE文件的目录 2进程的当前工作目录 3Windows系统目录 4Windows目录 5列在Path环境变量中的一系列目录,隐式链接,_declspec(dllimport) /*.h #pragma comment(lib,“MyDll.lib“) extern “C“_declspec(dllimport) int Max(int a,int b); extern “C“_declspec(dllimport) int Min(int a,int b); /*.cpp #include“Dlltest.
8、h“ Int x=Min(100,200);,显式链接,显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。 实现显式链接要麻烦一些。,跟显式链接相关的函数,HINSTANCE LoadLibrary( LPCTSTR lpLibFileName); FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName); BOOL FreeLibrary( HMODULE hLibModule);,typedef int(*pMax)(i
9、nt a,int b); typedef int(*pMin)(int a,int b); HINSTANCE hDLL; pMax Max; hDLL=LoadLibrary(“Win32DLL.dll“);/加载动态链接库Win32DLL.dll文件; if(!hDLL) MessageBox(“装入动态链接库失败!“); return ; Max=(pMax)GetProcAddress(hDLL,“Max“); if(!Max) MessageBox(“获取函数地址失败!“); return ; int A=Max(5,8); CString x; x.Format(“较大数是%d!“
10、,A); MessageBox(x); if(!FreeLibrary(hDLL)/卸载Win32DLL.dll文件; MessageBox(“关闭Win32DLL.dll失败“);,使用显式链接应用程序编译时不需要使用相应的Lib文件 关键字typedef,定义指向和DLL中相同的函数原型指针 GetProcAddress(hDLL,“Min”)改为 GetProcAddress(hDLL, MAKEINTRESOURCE(2),dumpbin usage: DUMPBIN options files options: /ALL /ARCH /ARCHIVEMEMBERS /DEPENDEN
11、TS /DIRECTIVES /DISASM /EXPORTS /FPO /HEADERS /IMPORTS /LINENUMBERS /LINKERMEMBER:1|2 /LOADCONFIG /OUT:filename /PDATA /RAWDATA:NONE|BYTES|SHORTS|LONGS,# /RELOCATIONS /SECTION:name /SUMMARY /SYMBOLS,DLL的概述 DLL的创建 DLL的使用,第12讲 多线程,程序Program 进程Process 线程Thread,线程的创建,HANDLE CreateThread( LPSECURITY_ATTR
12、IBUTES lpThreadAttributes, / pointer to security attributes DWORD dwStackSize, / initial thread stack size LPTHREAD_START_ROUTINE lpStartAddress, / pointer to thread function LPVOID lpParameter, / argument for new thread DWORD dwCreationFlags, / creation flags LPDWORD lpThreadId / pointer to receive
13、 thread ID );,线程的终止,VOID ExitThread( DWORD dwExitCode / exit code for this thread ); HANDLE GetCurrentProcess(VOID) BOOL TerminateThread( HANDLE hThread, / handle to the thread DWORD dwExitCode / exit code for the thread );,线程的挂起,DWORD SuspendThread( HANDLE hThread / handle to the thread );,线程的恢复,DW
14、ORD ResumeThread( HANDLE hThread / identifies thread to restart );,线程类,CWinThread,第13讲 文件操作,文本文件 二进制文件,1. BMP文件组成 BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否压缩、图像所用的颜色数等信息。颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,但如果图像为真彩色,既图像的每个像素用24个比特来表示,文件中就没有
15、这一块信息,也就不需要操作调色板。文件中的数据块表示图像的相应的像素值,需要注意的是:图像的像素值在文件中的存放顺序为从左到右,从下到上,也就是说,在BMP文件中首先存放的是图像的最后一行像素,最后才存储图像的第一行像素,但对与同一行的像素,则是按照先左边后右边的的顺序存储的;另外一个需要读者朋友关注的细节是:文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4的倍数,则正常存储,否则,需要在后端补0,凑足4的倍数。,2. BMP文件头 BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其结构定义如下: typedef struct tagBITMAPFILE
16、HEADER WORD bfType; / 位图文件的类型,必须为“BM“ DWORD bfSize; / 位图文件的大小,以字节为单位 WORD bfReserved1; / 位图文件保留字,必须为0 WORD bfReserved2; / 位图文件保留字,必须为0 DWORD bfOffBits; / 位图数据的起始位置,以相对于位图文件头的偏移量表示,以字节为单位 BITMAPFILEHEADER;该结构占据14个字节。,3. 位图信息头 BMP位图信息头数据用于说明位图的尺寸等信息。其结构如下: typedef struct tagBITMAPINFOHEADER DWORD biSi
17、ze; / 本结构所占用字节数 LONG biWidth; / 位图的宽度,以像素为单位 LONG biHeight; / 位图的高度,以像素为单位 WORD biPlanes; / 目标设备的平面数不清,必须为1 WORD biBitCount/ 每个像素所需的位数,必须是1(双色), 4(16色),8(256色)或24(真彩色)之一 DWORD biCompression; / 位图压缩类型,必须是 0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 DWORD biSizeImage; / 位图的大小,以字节为单位 LONG biXPelsPerMeter; /
18、 位图水平分辨率,每米像素数 LONG biYPelsPerMeter; / 位图垂直分辨率,每米像素数 DWORD biClrUsed;/ 位图实际使用的颜色表中的颜色数 DWORD biClrImportant;/ 位图显示过程中重要的颜色数 BITMAPINFOHEADER;该结构占据40个字节。 注意:对于BMP文件格式,在处理单色图像和真彩色图像的时候,无论图象数据多么庞大,都不对图象数据进行任何压缩处理,一般情况下,如果位图采用压缩格式,那么16色图像采用RLE4压缩算法,256色图像采用RLE8压缩算法。,4. 颜色表 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个
19、RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下: typedef struct tagRGBQUAD BYTErgbBlue;/ 蓝色的亮度(值范围为0-255) BYTErgbGreen; / 绿色的亮度(值范围为0-255) BYTErgbRed; / 红色的亮度(值范围为0-255) BYTErgbReserved;/ 保留,必须为0 RGBQUAD; 颜色表中RGBQUAD结构数据的个数由BITMAPINFOHEADER 中的biBitCount项来确定,当biBitCount=1,4,8时,分别有2,16,256个颜色表项,当biBitCount=24时,图像为
20、真彩色,图像中每个像素的颜色用三个字节表示,分别对应R、G、B值,图像文件没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下: typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader; / 位图信息头 RGBQUAD bmiColors1; / 颜色表 BITMAPINFO; 注意:RGBQUAD数据结构中,增加了一个保留字段rgbReserved,它不代表任何颜色,必须取固定的值为“0“,同时, RGBQUAD结构中定义的颜色值中,红色、绿色和蓝色的排列顺序与一般真彩色图像文件的颜色数据排列顺序恰好相反,既:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 链接 多线程 文件 操作 注册表 多媒体 编程 Winsock
链接地址:https://www.31doc.com/p-2584094.html