NPAPI插件开发详细记录:实用功能(库的使用及多线程)
2012-06-23 23:07
746 查看
有了前面的hello world的经验,本文在其基础上研究一些实用功能的实现。
动态加载dll,在加载之前先进行typedef,这里以实用winmm.dll中的函数PlaySound为例:
代码如下:
测试这个功能可以创建一个新的线程,并在该线程中利用前面的代码播放声音文件:
首先实现函数beginPlay,利用静态加载lib的方式来实现:
这样插件运行的时候就会在新创建的线程中播放声音文件了。
库的动态加载
Windows平台下,可以动态的对dll进行加载,使用到的API主要有:LoadLibrary、GetProcAddress、FreeLibrary等。下面以加载winmm.dll为例对相关代码进行简要介绍:动态加载dll,在加载之前先进行typedef,这里以实用winmm.dll中的函数PlaySound为例:
typedef BOOL (__stdcall/*或者WINAPI*/* pPlaySound)(LPCSTR pszSound,HMODULE hmod,DWORD fdwSound );接着加载dll并获取PlaySound的入口:
HMODULE handle = LoadLibrary("winmm.dll"); if(!handle) { //加载动态库不成功 return; } else { pPlaySound PlaySound=NULL; PlaySound=(pPlaySound)::GetProcAddress(handle, "PlaySound");接下来就可以使用刚刚获取到的函数了:
if(!PlaySound) {//加载函数不成功 return; } else {//加载成功,执行 HMODULE hmod=NULL; DWORD fdwSound=SND_FILENAME|SND_ASYNC;//SND_LOOP| PlaySound(_T("C:\\audio.wav"), hmod, fdwSound); } }使用完毕,进行释放:
if (handle) { FreeLibrary(handle); }动态加载dll比较方便,但我用得比较多的是静态加载。
库的静态加载
还是以加载winmm库为例,静态加载就不是winmm.dll了而是winmm.lib,使用方法是首先包含头文件,然后使用#pragma来加载lib文件:代码如下:
#include <MMSystem.h> #pragma comment(lib,"winmm.lib")接着在需要使用winmm.lib中的函数的地方只需要像调用其他函数一样进行调用即可,如:
HMODULE hmod=NULL; DWORD fdwSound=SND_FILENAME|SND_ASYNC;//SND_LOOP| PlaySound(_T("C:\\audio.wav"), hmod, fdwSound);注意:前面的代码我都是在plugin::init中添加的,能够在测试页面打开后正确播放C盘的audio.wav文件。
创建新线程
该功能可以使用_beginthread(需包含头文件process.h)来创建新的线程也可也使用WIN API CreateThread(需包含头文件windows.h)来创建。测试这个功能可以创建一个新的线程,并在该线程中利用前面的代码播放声音文件:
首先实现函数beginPlay,利用静态加载lib的方式来实现:
void beginPlay(void*)在init中添加_beginthread(beginPlay,0,NULL);
{
HMODULE hmod=NULL; DWORD fdwSound=SND_FILENAME|SND_ASYNC;//SND_LOOP| PlaySound(_T("C:\\audio.wav"), hmod, fdwSound);
}
这样插件运行的时候就会在新创建的线程中播放声音文件了。
相关文章推荐
- NPAPI插件开发详细记录:实用功能——改变插件窗口大小
- NPAPI插件开发详细记录:实用功能——获取插件路径、页面路径、资源路径
- NPAPI插件开发详细记录:实用功能——获取插件路径、页面路径、资源路径
- NPAPI插件开发详细记录:实用功能——添加、识别私有属性
- NPAPI插件开发详细记录:再谈多线程
- NPAPI插件开发详细记录:插件开发入门
- NPAPI插件开发详细记录:脚本化接口
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
- NPAPI插件开发详细记录:安装包的制作
- NPAPI插件开发详细记录:插件运行流程分析
- NPAPI插件开发详细记录:插件开发入门
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
- NPAPI插件开发详细记录:安装包的制作
- NPAPI插件开发详细记录:插件运行流程分析
- NPAPI插件开发详细记录:安装包的制作
- NPAPI插件开发详细记录:与JS交互
- NPAPI插件与JS交互开发详细记录
- NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤