吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4197|回复: 10
收起左侧

[C&C++ 转载] Win32笔记整理 day12

[复制链接]
九零-鑫鑫 发表于 2014-1-14 01:13
本帖最后由 九零-鑫鑫 于 2014-1-14 01:21 编辑

大家好,最近学校在讲win32马上要讲完了,我整理下部分笔记给大家参考下,
Win32部分主要讲了以下内容:
今天是第12win32的课程 我先把动态链接库的使用和文件以及目录的使用相关Api函数给大家介绍下:(前期的笔记过两天补上-另附源码)
今天主要的内容有:
动态链接库的使用
列表框的使用
文件、目录操作使用
显示链接
        1.定义函数指针类型 typedef
        2.加载动态库
                HMODULE LoadLibrary(
                        LPCTSTR lpFileName
                );返回DLL的实例句柄 (HINSTANCE)
        3.获取函数地址
        FARPROC GetProcAddress(   //
                HMODULE hModule,//Dll句柄
                LPCSTR lpProcName //函数名称
                );成功返回函数地址
        4.使用函数
        5.卸载动态库
                bool FreeLibrary(
                     HMODULE hModule //DLL的实例句柄
                );
制作动态库
        声明导出 - lib
        模块文件导出 - dll/lib
                .def文件
                LIBARY        库名
                EXPORTS
                        函数名                @1
                        函数名                @2
使用动态库
        隐式链接    - 连接器从lib文件中获取函数的偏移地址
        显式连接    - 程序执行起来后通过GetProcAddress函数动态的
                                                        从Dll文件查询到。        
动态库封装类        
        在类名称前增加 _declspec(dllexport)定义,例如:
        class        _declspec(dllexport)CMath{
                ....
        };
通常使用预编译开关切换类的导入导出定义,例如:
        #ifdef  DLLCLASS_EXPORTS
        #define        EXT_CLASS        _declspec(dllexport) //DLL
        #else
        #define        EXT_CLASS  _declpec(dllimport)//使用者
        #endif
        class EXT_CLASS CMath{
                ....
        };
动态库的程序入口
入口程序不是DLL必须的,常用于DLL内部初始化或善后处理。
        BOOL WINAPI DllMain(
                  HINSTANCE hinstDLL, //动态库实例句柄
                  DWORD fdwReason,    //被调用的原因
                  LPVOID lpvReserved   //保留值
        ); 返回TRUE,表示动态库加载成功。
        动态库的加载或卸载时会被调用。例如:使用LoadLibrary
                        FreeLibrary时会被调用。
        fdwReason 参数:               
        DLL_PROCESS_ATTACH 进程加载动态库
        DLL_PROCESS_DETACH 进程卸载动态库        
        DLL_THREAD_ATTACH  线程加载动态库
        DLL_THREAD_DETACH  线程卸载动态库
列表框的使用:
列表框的分类
        单列列表框 - 默认
        多列列表框 - LBS_MULTICOLUMN
列表框的使用
        1.创建        "LISTBOX" 窗口类名称
        2.添加选项        
                LB_ADDSTRING 使用 SendMessageBox
                LB_INSERTSTRING 指定位置
        3.删除选项
                LB_DELETESTRING - 删除指定项
                LB_RESETCONTENT - 清空所有项
        4.获取和设置选择项
                LB_GETCURSEL
                LB_SETCURSEL
        5.匹配查找
                LB_FINDSTRING
                LB_FINDSTRINGGEXACT
                LB_SELECTSTRING
        6.获取选项文本
                LB_GETTEXTLEN  长度
                LB_GETTEXT                 内容
        7.目录
                LB_DIR                                                        
        8.附加数据
                LB_SETTIEMDATA
                LB_GETTIEMDATA
通知消息
                LBN_SELCHANGE        - 当选项发生变化时,依附于
                                WM_COMMAND 消息发送到父窗口的窗口处理函数中。
文件目录操作相关:
Windows 文件系统
FATFAT32NTFS
硬盘的管理
        磁盘、扇、扇区 - 大小为512字节
文件系统最小管理单位
        簇 - 由连续的几个扇区组成8/16/32/64
        FAT32 - 116扇区 32
        NTFS  -        18扇区4k
Windows 目录
1.Windows 相关的目录
获取当前工作目录
                DWORD GetCurrentDirectory(
                  DWORD nBufferLength,  // 缓冲区大小
                  LPTSTR lpBuffer       // 缓冲区
                );
更改程序工作目录
                BOOL SetCurrentDirectory(
                  LPCTSTR lpPathName   // 目录
                );
Windows 目录
                UINT GetWindowsDirectory(
                  LPTSTR lpBuffer,  // 缓冲区
                  UINT uSize        // 缓冲区大小
                );
WindowsSystem目录
        UINT GetSystemDirectory(
          LPTSTR lpBuffer,  // buffer for system directory
          UINT uSize        // size of directory buffer
        );        
临时文件目录
        DWORD GetTempPath(
          DWORD nBufferLength,  // size of buffer
          LPTSTR lpBuffer       // path buffer
        );
目录创建
        BOOL CreateDirectory(
          LPCTSTR lpPathName,    // 目录名称
          LPSECURITY_ATTRIBUTES lpSecurityAttributes  // NULL
        );
移动目录(不能跨盘) 可以更改目录名称
        BOOL MoveFile(
          LPCTSTR lpExistingFileName, // 当前名字
          LPCTSTR lpNewFileName       // new file name
        );
删除目录(自能删除空目录)
        BOOL RemoveDirectory(
          LPCTSTR lpPathName   // directory name
        );        
               
Windows文件
1.创建Windows文件
        HANDLE CreateFile(
          LPCTSTR lpFileName,                         // file name
          DWORD dwDesiredAccess,                      // 访问权限
          DWORD dwShareMode,                          // 共享方式
          LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全属性 NULL
          DWORD dwCreationDisposition,                // 创建方式或打开
          DWORD dwFlagsAndAttributes,                 // 文件属性
          HANDLE hTemplateFile                        // 文件句柄模版 默认NULL
        );
                成功返回文件句柄
2.写数据
        BOOL WriteFile(
          HANDLE hFile,                    // 文件句柄
          LPCVOID lpBuffer,                // 数据BUFF
          DWORD nNumberOfBytesToWrite,     // 准备写入的数据长度
          LPDWORD lpNumberOfBytesWritten,  // 返回实际写入的数据
          LPOVERLAPPED lpOverlapped        // 默认为NULL
        );
3.读数据
        BOOL ReadFile(
          HANDLE hFile,                // handle to file
          LPVOID lpBuffer,             // data buffer
          DWORD nNumberOfBytesToRead,  // number of bytes to read
          LPDWORD lpNumberOfBytesRead, // number of bytes read
          LPOVERLAPPED lpOverlapped    // 默认为NULL
        );
4.关闭文件
        bool CloseHandle(
                HANDLE hObject //文件句柄
        )        
5.文件长度
        DWORD GetFileSize(
                HANDLE hFile,        //文件句柄
                LPDWORD lpFileSizeHigh //返回文件长度的高32
        );返回值是文件长度低32
6.文件指针
        DWORD SetFilePointer(
          HANDLE hFile,                // 文件句柄
          LONG lDistanceToMove,        // 偏移量的低32
          PLONG lpDistanceToMoveHigh,  // 偏移量的高32
          DWORD dwMoveMethod           // 偏移的相对位置
        );
7.文件相关操作
        CopyFile - 拷贝文件
        BOOL CopyFile(
          LPCTSTR lpExistingFileName, // 源文件名
          LPCTSTR lpNewFileName,      // 目的地名
          BOOL bFailIfExists          // 是否覆盖
        );  // TRUE - 不覆盖 FALSE - 覆盖
        DeleteFile - 删除文件
        MoveFile - 移动文件(随便跨盘)
8.文件属性
        GetFileAttributes - 获取文件属性
        SetFileAttributes - 设置文件属性
        GetFileAttributesEx - 获取文件属性、时间
文件遍历
1.查找文件
        HANDLE FindFirstFile(
          LPCTSTR lpFileName,               // 查找路径
          LPWIN32_FIND_DATA lpFindFileData  // 查找的数据WIN32_FIND_DATA是结构体
        );返回查找句柄                                
2.获取下一个文件
        BOOL FindNextFile(
          HANDLE hFindFile,                // 查找句柄
          LPWIN32_FIND_DATA lpFindFileData // 查找的数据
        );找到返回TRUE
3.关闭查找
        BOOL FindClose(
          HANDLE hFindFile   // 查找句柄
        );               



这是用word整理好的内容 排版可能不是太清楚 第一次发原创大家多多支持下 热心啥的多给点哈
下周六周日我会整理其他的内容 希望大家多多支持 不懂不会的地方可以问我
只要我懂的就一一给您解答 这也是一个学习的机会。

免CB地址回复可见:
动态库静态库使用例子:http://pan.baidu.com/s/1kT5Fmlh
文件、目录使用例子: http://pan.baidu.com/s/1mgylE7e

Day11.zip (720.93 KB, 下载次数: 11)
Day12.rar (512.05 KB, 下载次数: 9)









发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 九零-鑫鑫 发表于 2014-1-14 01:20
唉 明明是把关键字变成蓝颜色的了 但是还是不行啊 果断不太会发帖 _(:з」∠)_ 大家别嫌弃
Jermic 发表于 2014-1-14 01:25
以指代步 发表于 2014-1-14 02:34
窝窝头3号 发表于 2014-1-15 09:08
慕名而来
www52pojiecn 发表于 2014-1-15 10:46
谢谢提供讲解
www52pojiecn 发表于 2014-1-15 10:52
day11在哪里?
www52pojiecn 发表于 2014-1-15 10:56
找不到day11等前面的帖子,能发布一下链接吗?谢谢啦
q546624527 发表于 2014-1-15 11:12
不明觉厉..

rainboyxxx 发表于 2014-1-15 11:12
谢谢楼住 正需要
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 06:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表