急,在线等!在OCX中使用DIRECTSHOW时,出现链接错误!!
Linking...
Creating library Release/VodClientOcx.lib and object Release/VodClientOcx.exp
strmbase.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)
strmbase.lib(dllentry.obj) : error LNK2001: unresolved external symbol "int g_cTemplates" (?g_cTemplates@@3HA)
Release/VodClientOcx.ocx : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
环境描述:用VC6开发一个OCX控件(一个媒体播放控件),主体是一个对话框,这个对话框负责媒体的播放(其中用到了DirectShow),编译链接时出现以上错误。
对话框单独播放都没有问题,只是在加入到OCX中后出现问题。
问题点数:80、回复次数:6Top
1 楼yyhzpk(zpk)回复于 2005-06-28 11:23:30 得分 60
在XXCtrl.h前面加入以下语句:
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();
}Top
2 楼yyhzpk(zpk)回复于 2005-06-28 11:27:26 得分 0
原因好像是Dshow的streambasd.lib和ActiveX给的lib 冲突引起的。
但在OCX 中引用Dshow的filter,释放资源会出一些问题,希望和楼主
一起学习Top
3 楼httpaspjspphp(小杨大刀)回复于 2005-06-28 11:37:37 得分 0
一些库没设置好吧
Top
4 楼ycl(原材料)回复于 2005-06-28 12:01:34 得分 20
yyhzpk(zpk) 的可以解决问题,在一些国外的网站上有详细的说明。我前段时间也碰到过该问题
The problem exists because you end up linking in strmbase.lib which has entry points functions for DllGetClassObject() and DllCanUnloadNow() among others. You really don't want these entry points defined in for your ActiveX control. They are designed for DirectShow filters, and require g_Templates to be defined by your filter. One solution is to override the following functions by implementing them into your ActiveX control yourself. That way you don't pull in the ones from the DShowTop
5 楼yyhzpk(zpk)回复于 2005-06-28 12:48:41 得分 0
to:ycl()
但是加入上面的方法之后,好像在网页刷新时候,进行
filter资源释放的时候,有的filter好像释放不掉,仍然在正常工作,
不知你是否遇到过Top
6 楼vc_c(狼)回复于 2005-06-28 14:15:41 得分 0
谢谢yyhzpk和ycl两位。问题已经解决了,我在做一个VOD点播系统,客户端需要做成OCX放入IE中,有什么后续进展随时和两位联系。Top




