有关Filter开发的问题,各位高手救命啊!陆老师,指点一下啊,谢谢!

huazaimh 2005-08-19 12:10:31
我买了陆老师的三本书
但是呢,在实际操作中还有有点问题
------------------------------------------------------------------------------------
C:\DXSDK\Samples\C++\DirectShow\Filters\TestFilter\TestFilterL.cpp(26) : error C2512: 'CBaseFilter' : no appropriate default constructor available
C:\DXSDK\Samples\C++\DirectShow\Filters\TestFilter\TestFilterL.cpp(32) : error C2512: 'CBaseFilter' : no appropriate default constructor available
C:\DXSDK\Samples\C++\DirectShow\Filters\TestFilter\TestFilterL.cpp(48) : error C2065: 'pFilter' : undeclared identifier
Error executing cl.exe.
Creating browse info file...

TestFilter.ax - 3 error(s), 0 warning(s)
---------------------------------------------------------------------------------------
我干脆把源代码贴出来 ,请大家指点一下,谢谢谢谢!!
// TestFilterL.cpp: implementation of the CTestFilter class.
//
//////////////////////////////////////////////////////////////////////


#include "stdafx.h"
#include "TestFilterL.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////



CTestFilter::CTestFilter()
{

}

CTestFilter::CTestFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr)

{

}

CTestFilter::~CTestFilter()
{

}

CUnknown * WINAPI CTestFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
{
// CTestFilter *pFilter = new CTestFilter(NAME("TestFilter"), pUnk, pHr);
// if (pFilter== NULL)
// {
// *pHr = E_OUTOFMEMORY;
// }
return pFilter;
}
========================================================------------------------------------------====================================----------------------------------------
// TestFilter.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "TestFilter.h"
#include "TestFilterL.h"
#include "Streams.h"

#include <initguid.h>

#include <bdaiface.h>
#include <bdatypes.h>
//
// DllRegisterServer
//
// Handles DLL registry
//
STDAPI DllRegisterServer()
{
return AMovieDllRegisterServer2(TRUE);

} // DllRegisterServer


//
// DllUnregisterServer
//
STDAPI DllUnregisterServer()
{
return AMovieDllRegisterServer2(FALSE);

} // DllUnregisterServer

// Setup data
const AMOVIESETUP_FILTER sudTestFilter =
{
&CLSID_TestFilter, // Filter CLSID
L"TestFilter", // String name
MERIT_DO_NOT_USE, // Filter merit
0,
NULL
};


CFactoryTemplate g_Templates[1] =
{
{
L"Test Filter", // Name
&CLSID_TestFilter, // CLSID
CTestFilter::CreateInstance, // Method to create an instance of MyComponent
NULL, // Initialization function
&sudTestFilter // Set-up information (for filters)
}
};

int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]);

//
// DllEntryPoint
//
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
};
============================================================================
// TestFilterL.h: interface for the CTestFilter class.
//
//////////////////////////////////////////////////////////////////////


#include <streams.h>
#include "amfilter.h "
#include "initguid.h"

#if !defined(AFX_TESTFILTERL_H__4F5D951A_9829_40A8_B69F_DD12A42D6848__INCLUDED_)
#define AFX_TESTFILTERL_H__4F5D951A_9829_40A8_B69F_DD12A42D6848__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


class CTestFilter : public CBaseFilter,public CCritSec
{
public:
CTestFilter();
CTestFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr);
virtual ~CTestFilter();

static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);

};

#endif // !defined(AFX_TESTFILTERL_H__4F5D951A_9829_40A8_B69F_DD12A42D6848__INCLUDED_)


...全文
308 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mycolors 2005-09-06
  • 打赏
  • 举报
回复
楼主拿现有的FILTER例子改着学比较快,我以前做毕业设计的时侯做的就是DIRECTSHOW的东西,我就是拿DIRECT SDK里面的例子一个个看出来的
Suddy 2005-09-03
  • 打赏
  • 举报
回复
C++没有学好, 不是filter的问题
SuperKan 2005-09-01
  • 打赏
  • 举报
回复
Debug?Release?Unicode_Debug?
rageliu 2005-08-26
  • 打赏
  • 举报
回复
楼主!!
error C2512: 'CBaseFilter' : no appropriate default constructor available
错误是说CBaseFilter没有合适的构造函数
hapy兄说解决办法的!!!在你自己的类的构造函数后做这样的处理
CTestFilter::CTestFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr) :
CBaseFilter(此处参数省略)
{
}
就没问题了
vencent 2005-08-24
  • 打赏
  • 举报
回复
能不能把windows media编程导向的源代码发给我一份啊,我的光盘被烟头烫坏了,郁闷!
谢谢了 lingfp@tom.com
huazaimh 2005-08-23
  • 打赏
  • 举报
回复
inking...
.\TestFilter.def : warning LNK4017: PRIVATE  statement not supported for the target platform; ignored
Creating library Debug/TestFilter.lib and object Debug/TestFilter.exp
TestFilterL.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __stdcall CBaseFilter::NonDelegatingRelease(void)" (?NonDelegatingRelease@CBaseFilter@@UAGKXZ)
Debug/TestFilter.ax : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

这个地方老是弄不对,我知道可能是要重载这个函数,但是,怎么写都不对!
各位老师请指点一下啊!谢谢谢谢!
yyhzpk 2005-08-23
  • 打赏
  • 举报
回复
DECLARE_IUNKNOWN;
huazaimh 2005-08-23
  • 打赏
  • 举报
回复
大哥,我也是实现了的
这种办法也做了
但是呢,还是有问题
TestFilterL.obj : error LNK2001: unresolved external symbol "public: virtual unsigned long __stdcall CBaseFilter::NonDelegatingRelease(void)" (?NonDelegatingRelease@CBaseFilter@@UAGKXZ)
Debug/TestFilter.ax : fatal error LNK1120: 1 unresolved externals
---------------------------------------
真郁闷!
不知道这个怎么搞定!!
我相信我的环境没有问题了
但是呢,却找不到问题在什么地方!
ablewindy 2005-08-23
  • 打赏
  • 举报
回复
看样子你还是拿个现成的Filter进行修改好了!
至于NonDelegatingRelease是什么,我还真没见过,至少你将它实现试试!反正简单地返回一个0就行了!
Link错误一般是你没有包含相应的库或没实现相应的方法!
ablewindy 2005-08-19
  • 打赏
  • 举报
回复
拿个例子先改改可能对你有帮助哦!
比如拿个SDK中例子试着一步步去掉他的处理的所有功能;然后再把自己想要的东西从简入繁加上去!
happydeer 2005-08-19
  • 打赏
  • 举报
回复
不知道谁教你要这么写filter的?!建议你多参考sdk的filter例子。

从你列出的代码,我大致给你指出几个问题:
1. 关于“error C2512: 'CBaseFilter' : no appropriate default constructor available”
你应该在你的filter类CTestFilter构造时同时初始化CBaseFilter对象,如下:

CTestFilter::CTestFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr) :
CBaseFilter(此处参数省略)
{
}

2. 如果你没有在vc的project settings中设置filter的入口点是DllEntryPoint,那么你应该在DllMain函数中调用DllEntryPoint,而不是直接return TRUE。

3. 请不要在头文件中调用#include "initguid.h"
ablewindy 2005-08-19
  • 打赏
  • 举报
回复
你继承自CBaseFilter至少要实现它的两个纯虚函数:
GetPinCount()
GetPin()


huazaimh 2005-08-19
  • 打赏
  • 举报
回复
这个我都编绎了,不会有问题
但是在写Filter的时候啊,问题就来了,楼上的大哥能指点一下么?
--------------------------------------------------------------------------------------
C:\DXSDK\Samples\C++\DirectShow\Filters\TestFilter\TestFilterL.cpp(17) : error C2512: 'CBaseFilter' : no appropriate default constructor available
Error executing cl.exe.
Creating browse info file...

TestFilter.ax - 1 error(s), 0 warning(s)
boluoCTO 2005-08-19
  • 打赏
  • 举报
回复
BaseFilter在directx/sample/c++/directshow/baseclass目录下,需要编译生成lib文件,然后链接,看MS例子比任何书都好
huazaimh 2005-08-19
  • 打赏
  • 举报
回复
// TestFilterL.cpp: implementation of the CTestFilter class.
//
//////////////////////////////////////////////////////////////////////


#include "stdafx.h"
#include "TestFilterL.h"
#include "TestUIDs.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////



CTestFilter::CTestFilter()
{

}

CTestFilter::CTestFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr)
:CBaseFilter(NAME("TestFilter"), pUnk, &m_Lock, CLSID_TestFilter)
{

}

CTestFilter::~CTestFilter()
{

}

CUnknown * WINAPI CTestFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
{
CTestFilter *pFilter = new CTestFilter(NAME("TestFilter"), pUnk, pHr);
if (pFilter== NULL)
{
*pHr = E_OUTOFMEMORY;
}
return pFilter;
}

--------------------------------------------------------------------------------------
C:\DXSDK\Samples\C++\DirectShow\Filters\TestFilter\TestFilterL.cpp(17) : error C2512: 'CBaseFilter' : no appropriate default constructor available
Error executing cl.exe.
Creating browse info file...

TestFilter.ax - 1 error(s), 0 warning(s)
huazaimh 2005-08-19
  • 打赏
  • 举报
回复
谢谢陆老师,谢谢ablewindy(我是【风子】我怕谁) !
我现在确信我的DirectShow的环境不会有问题了,因为我是把我的工作文件放在Filter目录下面的,我把有关的设置是拷贝过去的,所以呢,不会有问题了,并且可以编绎过DirectShow里面自带的Filter例子。
上面的例子呢,是自己摸索写的,实在是比较乱。

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧