软件安全之动态链接库的使用 Libzplay 播放音乐

实验 1 动态链接库的使用

  1. 实验说明

Libzplay 是遵循 GPL 协议的开源库,它集成了 mp3、flac、ac3、aac、wav等多种音频格式的解码器和编码器,提供了面向 C/C++、C#、Delphi 等多种编程语言的接口,仅需 3 行代码(创建播放资源,打开文件,开始播放)便可实现音乐播放功能。

  1. 实验目的

本实验通过 Libzplay 提供的 C 语言接口,实现简单的音乐播放器,以此学习 DLL 的隐式和显式加载方式。

  1. 实验原理

课程第 2 讲基础知识

  1. 实验环境

Windows 桌面系统,Visual Studio 6.0 及以上版本,libzplay SDK

  1. 实验内容
    • 隐式链接
    • 显示链接

练习 1 隐式链接 DLL

1、基础步骤

  1. 创建控制台应用程序项目

打开 VS,选择空项目模板创建控制台应用程序,命名为 zplay-im,然后向新建项目中添加源程序文件,编写 main 函数。

  1. 拷贝头文件和库文件

将 libzplay 库中的头文件 和库文件 到 zplay-im 项目所在的目录。

  1. 编写播放程序

使用 libzplay C 语言接口播放音乐文件,至少需要依次调用如下 3 个函数:

完整的程序如下

  1. 编译程序

编译成功后,将 libzplay 库中的 DLL 文件 拷贝到编译生成的可执行文件所在目录,或者将该 DLL 文件放入 DLL 加载过程要搜索的目录。歌曲文件以位置为原点,相对目录寻址。

  1. 运行程序仅编写上述代码,程序运行后将立即退出,应如何添加代码使其正常播放音乐/p>

    • 可以在底部加入一条scanf语句,getchar()语句等,使其处于一直等待输入的状态,程序自然也不会停止;
    • 使用while(true)也可以实现程序一直进行;
    • 也可以使得程序暂停。

2、拓展设计

  1. 根据 libzplay 提供的数据类型定义和函数接口原型,设计较为完整的音乐播放器,实现播放过程的暂停、播放、停止等控制功能。

  2. 播放完毕后,需要做清理工作:

    • zplay_OpenFile 和 zplay_Close 是相对应的 2 个函数,打开的音乐文件不再播放时需要关闭;
    • zplay_CreateZPlay 和 zplay_DestroyZPlay 是相对应的 2 个函数,libzplay 申请的各类资源,不再需要时需要销毁。

附带播放、暂停、停止的完整程序

运行效果如图所示,此时无声胜有声。相信大家已经听到大弦嘈嘈如急雨,小弦切切如私语。嘈嘈切切错杂弹,大珠小珠落玉盘。间关莺语花底滑,幽咽泉流冰下难。冰泉冷涩弦凝绝,凝绝不通声暂歇。别有幽愁暗恨生,此时无声胜有声。银瓶乍破水浆迸,铁骑突出刀枪鸣。曲终收拨当心画,四弦一声如裂帛。

  1. libzplay 提供的部分 C 语言接口声明

3、思考与总结

  • 为什么最开始程序运行后便立即退出/li>

有可能是没有使进程阻塞的语句。在前加上语句可以使得程序暂停

练习 2 显式链接 DLL

1、基础步骤

  1. 创建控制台应用程序项目

打开 VS,选择空项目模板创建控制台应用程序,命名为 zplay-ex,然后向新建项目中添加源程序文件 ,编写 main 函数。

  1. 编写播放程序
  • 定义三个函数指针

zplay_Play 的函数指针:

zplay_CreateZPlay和zplay_OpenFile的函数指针:

typedef ZPLAY_HANDLE (_stdcall* pfnCreateZPlay)();typedef int (_stdcall* pfnOpenFile)(ZPLAY_HANDLE handle, const char* sFileName, TStreamFormat nFormat);

                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月22日
下一篇 2021年9月22日

相关推荐