首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > VSTS >

TCPMP之旅(2) TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

2012-07-20 
TCPMP之旅(二)TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)转载请标明是引用于 http://blog.csdn

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位的,根据实际情况)

TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

然后把yasm-1.2.0-win32.exe 名字改为 yasm.exe,并把它复制到你VS2005的安装路径下,

eg:

TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

 

之后再编译可能报以下错误:


原因可能有两个:

(1)是不是有中文路径

(2)路径中是否有空格。

 

2、 编译其它工程

2、1  在其它工程出现链接时提示找不到标识符时,在链接lib中加入我们刚刚编译的common.lib。(当然也得加入链接目录)

   TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

 

2、2 在编译player时会报错:


解决方法是将main.c中的  第122行改为 123行.

TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

 

二、测试

  以下是目标文件:

TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

效果:

TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

三、插件的加载过程

补充:附后了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工程源码解读

    Interface插件功能模块包含在interface文件夹下,其中的interface.c实现图形界面的大部分功能,

还有小部分功能在win_win32.c文件中实现.程序运行过程基本有下面几个步骤:

  1.  多媒体播放器运行程序为player.exe,工程中main.c文件的WinMain函数为程序开始的第一步。

它先加载e:\Au1380_forVolo\tcpmp_from_xianshengWin32\debug\ilayer.exe  ,假如它不存在就加载 interface.plg。

然后转到interface.plg的main函数中。


 

   2.  common工程是核心模块

是一个开放的集数据输入、转换、音/视频解码、信号输出等功能为一体的完整的多媒体播放框架。WinMain后调用 common.dll中的Contxt_Init函数,完成各个功能模块ID的注册工作.除Interface功能外,其他功能模块的注册基本在 Contxt_Init中完成.


 

   3.   在调用完Context_Init后调用了WinPopupClass(INTERFACE_ID,NULL);


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实现窗口创建功能.

 

 6.Popup函数中调用HandleMessage(p,&Msg),该函数为消息响应函数,Popup完成主窗口创建的后给HandleMessage函数发送WM_CREATE消息.


 

 7.   WM_CREATE消息响应

分两部分:

   win_win32.c中的CALLBACK Proc首先响应,完成窗口工具栏的创建;

   


 

    然后interface.c中的bool_t Proc函数再响应完成工具栏中系统菜单,进度条,播放控件和声音控制的创建.

   TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

8.  MSG_INIT消息响应

     主要是在interface.c中的Proc 函数中.

   TCPMP之旅(2)  TCPMP 在win32下的编译过程+插件的加载过程(VS2005+XP)

       TCPMP包含的内容比较丰富,要研究透彻还需要花很多功夫,继续努力中...


 

热点排行