开发ActiveX控件的实践(2)--让控件可以使用DirectShow基类

在开发了一个具有基本功能的ActiveX控件后,我们将利用DirectShow技术为其添加更多的功能。要利用DirectShow进行开发,除了配置好VS2010的开发环境之外,还需要在项目中包含streams.h头文件、并加入DirectShow的基本类BaseClass的链接库文件,Debug版本的项目需在项目->项目属性->配置属性->链接器->输入->附加依赖项中加入strmbasd.lib,Release版本的项目则要在上述位置的附加依赖项中加入strmbase.lib。

 

    加入了DirectShow的基类链接库后,如果此时编译就会出现以下编译错误:

 

       strmbasd.lib(wxutil.obj) : error LNK2019: 无法解析的外部符号 __imp__timeGetTime@0 

       strmbasd.lib(wxutil.obj) : error LNK2019: 无法解析的外部符号 __imp__timeSetEvent@20

 

          

       strmbasd.lib(dllentry.obj) : error LNK2001: 无法解析的外部符号 "class CFactoryTemplate *

                                          g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)
       strmbasd.lib(dllentry.obj) : error LNK2001: 无法解析的外部符号 "int g_cTemplates"

                                           (?g_cTemplates@@3HA) 

 

    解决的办法是:

 

1、在附加依赖项中再加入winmm.lib链接库文件,这样将不会再出现error LNK2019的编译错误。

2、在项目的TestOcxCtrl.h头文件的后面添加如下的代码将消除error LNK2001的编译错误:

 

extern "C"
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    return AfxDllGetClassObject(rclsid, riid, ppv);
}
/////////////////////////////////////////////////////////////////////////////
// DllCanUnloadNow
extern "C"
STDAPI DllCanUnloadNow(void)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    return AfxDllCanUnloadNow();
}

 

    这样,我们就可以利用DirectShow技术为TestOcx控件添加一些实用的方法了。

 

 

参考文章:http://blog.csdn.net/king011a/article/details/4553671

你可能感兴趣的:(C++,mfc,VS2010,ActiveX,控件)