TCPMP之旅(二) TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)
转载请标明是引用于 http://blog.csdn.net/chenyujing1234
欢迎大家提出意见,一起讨论!
TCP的码源框架介绍可以参考我的文章: 1>'yasm' 不是内部或外部命令,也不是可运行的程序
解决方法:
从 http://yasm.tortall.net/Download.html 下载得到yasm-1.2.0-win32.exe文件 (我的电脑是32位的,根据实际情况)
然后把yasm-1.2.0-win32.exe 名字改为 yasm.exe,并把它复制到你VS2005的安装路径下,
eg:
之后再编译可能报以下错误:
原因可能有两个:
(1)是不是有中文路径
(2)路径中是否有空格。
2、 编译其它工程
2、1 在其它工程出现链接时提示找不到标识符时,在链接lib中加入我们刚刚编译的common.lib。(当然也得加入链接目录)
2、2 在编译player时会报错:
解决方法是将main.c中的 第122行改为 123行.
二、测试
以下是目标文件:
效果:
补充:附后了interface.plg插件外的插件加载方法。
加载方法同样通过DLLRegister接口。加载插件的过程是在Context_Init函数中的Plugins_Init函数完成的。
(1) Plugins_Init先通过FindPlugins(&List);查找exe目录中的所有插件,找到即调用AddModule将
此节点存到Context p->NodeModule(用于管理外部插件模块数组)中去。
并根据注册表判断是否要加载此插件。
(2) 从common.dll目录下增加插件,从注册表中增加插件。
(3) 把插件节点注册。即把节点加入到Context p->NodeClass中
四、Interface工程源码解读
还有小部分功能在win_win32.c文件中实现.程序运行过程基本有下面几个步骤:
它先加载e:\Au1380_forVolo\tcpmp_from_xianshengWin32\debug\ilayer.exe ,假如它不存在就加载 interface.plg。
然后转到interface.plg的main函数中。
是一个开放的集数据输入、转换、音/视频解码、信号输出等功能为一体的完整的多媒体播放框架。WinMain后调用 common.dll中的Contxt_Init函数,完成各个功能模块ID的注册工作.除Interface功能外,其他功能模块的注册基本在 Contxt_Init中完成.
NodeCreate完成创建节点功能,它是common.lib中的接口。此接口不仅被interface模块调用,也被很多模块调用。
NodeCreateFromClass调用interface.plg中DLLRegister函数。
通过DLLRegister函数对INTREFACE_ID对象进行注册,对象注册完成创建和内存分配等功能.
====================补充 start ==================================================
interface插件的注册过程( 其实与其它插件的注册过程一致,都是通过调用common.dll库完成的):
(1)NodeCreateFromClass中有LoadModule,LoadModule中有NodeLoadModule,
它寻找对应于ID为INTREFACE_ID的插件对应的plg,从plg中找到DLLRegister接口,来注册自己。
====================补充 end==================================================
上面的代码主要调用CallCreate函数.
4. 注册后interface.c中Create函数对INTREFACE_ID对象intface* p进行初始化,完成界面状态的最初设置.
5.主窗口创建与弹出,win_win32.c文件中WinPopupClass函数调用Popup函数,Popup实现窗口创建功能.
分两部分:
win_win32.c中的CALLBACK Proc首先响应,完成窗口工具栏的创建;
然后interface.c中的bool_t Proc函数再响应完成工具栏中系统菜单,进度条,播放控件和声音控制的创建.
主要是在interface.c中的Proc 函数中.