怎样证明-flitercleaning引回的是指针还是地址

Servlet Filter 在执行chain.doFilter(req,res)时发生空指针异常
[问题点数:20分,结帖人u]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:614
匿名用户不能发表回复!
其他相关推荐
过滤器的生命周期一般要经过的阶段
当容器第一次加载改过滤器时,init方法将被调用,该类在这个方法中包含了一个指向Filter Config对象的引用,通常在web.xml中init-param中配置了初始化的参数;
过滤器的大多数时间消耗在这里。DoFilter方法被容器调用,同时传入分别指向这个请求/响应链中的Servlet,Request,Servlet Respons
tomcat责任链设计模式 FilterChain原理解析实现filterchain的dofilter方法里面存在这种机制,把自身接收到的请求request对象和response对象和自身对象即filterchain作为下一个过滤器的dofilter的三个形参传递过去,这样才能使得过滤器传递下去,当然这个方法中还存在一些判断if等机制用来判断现在的这个过滤器是不是最后一个,是的话就可以把请求和响应...
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)
HttpServletResponse response = (HttpServletResponse)
HttpSession session = request.getSession();
//是否登录
//开放注册页面
if(null==session.getAttribute(&merchantInfo&)
&&request.getRequestURL().indexOf(&regist/merchant/acount.jsp&)==-1){
response.sendRedirect(request.getContextPath());
chain.doFilter(request, response);
web.xml配置:
&filter-name&accessFilter&/filter-name&
&filter-class&com.loginFilter&/filter-class&
&filter-mapping&
&filter-name&accessFilter&/filter-name&
&url-pattern&/jsp/*&/url-pattern&
&/filter-mapping&
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用。
Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器。
Request 对象
从浏览器端取得数据的方法
Request.QueryString 集合读取表单
HttpServlet
里的三个方法:service(HttpServletRequest req, HttpServletResponse resp) ,doGet(HttpServletRequest req, HttpServletResponse resp), doPost(HttpServletRequest req, HttpServletResponse res)的区别和联系:
初始登录Servlet:
package cn.xbai.
import java.io.IOE
import javax.servlet.ServletE
import javax.servlet.http.HttpS
import javax.servlet.http.HttpServletR
* 查询好友列表
@ResponseBody
public JSONArray queryFriendList(String userid) throws Exception{
JSONObject resultJobj = new JSONObject();
不要相信客户端, 所以做后端的人都应该铭记的事情。因为前端传过来的数据并不总是合法和有效的,所以后端是对访问资源的最后一道保护伞。之前我们在Spring中说到过AOP编程,AOP基础知识,它就可以在执行我们的方法之前进行一些预处理和验证来保护后端的资源。不难想到她的实现方式和本篇要说的过滤器的实现原理应该是相同的,都是通过Java的动态代理实现的(自己的理解)。
只要把Tomcat的源码添加进去就可以
首先随便建立一个类,继承Servlet,然后点击Servlet,添加源代码包即可。下次新建就会自动把参数arg0、arg1改为req、res
filter在web开发中可谓是神通广大,想必大家都有所了解,在这里不作赘述。
下面主要谈一谈chain.doFilter(request, response);这条语句是怎么回事,过滤器的作用就是之一就是在用户的请求到达servlet之前,拦截下来做预处理,处理之后便执行chain.doFilter(request, response)这个方法,如果还有别的过滤器,那么将处理好的请求传给下个过09:18 提问
Javaweb写个登录过滤器,但是报空指针异常。求教大神
按赞数排序
没有student这个属性吧,可以检查下是不是stu那儿是空的,错误在49行
哥们,报空指针你就看看对应地方有木有值,然后调试啊 ,这个不用问别人吧
session没值,看下是不是你没存
这个空指针异常时最好解决的啊,你看看stu是不是空的,你是不是没有取到
提交请求先走过滤器的话,session中就没有值,从session获取的stu对象自然是null,假设用户名放在name为username的input框中提交请求,若是从request.getParamater("username")获取或许会取到值
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐报的这个java.lang.NullPointerException是什么位置引起的空指针呀?_百度知道
报的这个java.lang.NullPointerException是什么位置引起的空指针呀?
java.lang.NullPointerExceptionatcom.n22.message.Message.getExtra(Message.java:45)atcom.talife.tnt.server.common.action.NciServer.entrance(NciServer.java:329)atsun.reflect...
java.lang.NullPointerException at com.n22.message.Message.getExtra(Message.java:45) at com.talife.tnt.server.common.action.NciServer.entrance(NciServer.java:329) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.n22.ehero.base.web.action.ActionFliter.executeByBean(ActionFliter.java:195) at com.n22.ehero.base.web.action.ActionFliter.doFilter(ActionFliter.java:60) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:14
获赞数:55
at com.n22.message.Message.getExtra(Message.java:45)这写着了
love小唐哥
love小唐哥
采纳数:41
获赞数:140
Message.java这个类的第45行出现空值
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Filter里面,万恶的空指针异常,求大神解答【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:724,902贴子:
Filter里面,万恶的空指针异常,求大神解答收藏
我在一个Filter里面,语句
chain.doFilter(request,response)弹出空指针异常,求大神解答。具体的异常信息见下:com.ibm.websphere.servlet.error.ServletErrorReport: java.lang.NullPointerExceptionRoot Cause:java.lang.NullPointerExceptionnullStackTrace:java.lang.NullPointerExceptioncom.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:152)soon.servlet.SoonFilter.doFilter(SoonFilter.java:29)com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:934)com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:864)com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276)com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1646)
51CTO学院12年行业品牌,1600万用户选择,中国专业IT技能学习平台,java.java资深大牛授课,0基础从入门到精通,java报名与培训中心.
引发异常的地方在
chain.doFilter(req, res);
登录百度帐号本篇文档我们将要讲述如何给一个filter创建一个属性页,通过CBasePropertyPage基类。这篇文档的实例代码演 示了创建属性页的步骤,这里我们假设我们要创建属性页的视频filter支持饱和度属性页,这个属性页有一个滑动条,用户可以通过这个滑动条来控制饱和 度。第一步,设置属性的机理Filter必须支持一种和属性页沟通的方式,通过属性页可以设置或者获取filter的属性,下面是可能的三种方式1暴露一个接口2通过IDispatch支持自动化属性3暴露IPropertyBag 接口,并定义一系列的属性下面的例子利用了一个普通的COM接口,叫做ISaturaton,这并不是一个真正的com接口,只是我们用来在这里举例的,你也可以自己定义任何的com对象。首先我们在一个头文件中声明接口的ID和定义。// Always create new GUIDs! Never copy a GUID from an example.
DEFINE_GUID(IID_ISaturation, 0x19412d6e, 0x6401,
0x475c, 0xb0, 0x48, 0x7a, 0xd2, 0x96, 0xe1, 0x6a, 0x19);
interface ISaturation : public IUnknown
STDMETHOD(GetSaturation)(long *plSat) = 0;
STDMETHOD(SetSaturation)(long lSat) = 0;
你也可以用IDL定义接口,并用MIDL编译器创建头文件,然后在Filter上实现这个接口,这个例子采用“Get”,“Set”方法来设置饱和度的值,注意,修改这个m_lSaturation的值的时候一定要进行保护class CGrayFilter : public ISaturation,
CCritSec m_csS // Protects shared data.
long m_lS // Saturation level.
STDMETHODIMP GetSaturation(long *plSat)
if (!plSat) return E_POINTER;
CAutoLock lock(&m_csShared);
*plSat = m_lS
return S_OK;
STDMETHODIMP SetSaturation(long lSat)
CAutoLock lock(&m_csShared);
if (lSat & SATURATION_MIN || lSat & SATURATION_MAX)
return E_INVALIDARG;
m_lSaturation = lS
return S_OK;
当然你实现接口的一些细节可能和上面的代码不一致。反正你自己实现就是了第二步,实现ISpecifyPropertyPages接口做完了上一步,下面就要在你个filter中实现ISpecifyPropertyPages接口,这个接口只有一个方法,GetPages,这个方法返回filter所支持的所有的属性页的CLSID。在这个例子里,Filter只支持一个属性页,首先产生一个CLSID,并在头文件声明// Always create new GUIDs! Never copy a GUID from an example.
DEFINE_GUID(CLSID_SaturationProp, 0xa9bd4eb, 0xded5,
0x4df0, 0xba, 0xf6, 0x2c, 0xea, 0x23, 0xf5, 0x72, 0x61);
然后要实现ISpecifyPropertyPages接口的GetPages方法:class CGrayFilter : public ISaturation,
public ISpecifyPropertyPages,
STDMETHODIMP GetPages(CAUUID *pPages)
if (pPages == NULL) return E_POINTER;
pPages-&cElems = 1;
pPages-&pElems = (GUID*)CoTaskMemAlloc(sizeof(GUID));
if (pPages-&pElems == NULL)
return E_OUTOFMEMORY;
pPages-&pElems[0] = CLSID_SaturationP
return S_OK;
}第三步,支持QueryInterface为了暴露Filter的接口,照着下面的步骤作哦1 在你的filter中包含DECLARE_IUNKNOWN宏的声明:
DECLARE_IUNKNOWN;
2 重载CUnknown::NonDelegatingQueryInterface 方法来检查两个接口的IIDs。
STDMETHODIMP CGrayFilter::NonDelegatingQueryInterface(REFIID riid,
void **ppv)
if (riid == IID_ISpecifyPropertyPages)
return GetInterface(static_cast&ISpecifyPropertyPages*&(this),
if (riid == IID_ISaturation)
return GetInterface(static_cast&IYuvGray*&(this), ppv);
return CBaseFilter::NonDelegatingQueryInterface(riid, ppv);
第四步,创建属性页到这一步,filter已经支持一个属性页的所需要的东西了,下一步就是要实现属性页本身了。首先创建一个对话框的资源,然后以这个对话的资源声明一个类,要从CBasePropertyPage. 派生,图1下面的代码显示了部分的声明,包含了我们在后面将要用到的部分变量。class CGrayProp : public CBasePropertyPage
ISaturation *m_pG // Pointer to the filter's custom interface.
long m_lVal // Store the old value, so we can revert.
long m_lNewV // New value.
看看构造函数吧CGrayProp::CGrayProp(IUnknown *pUnk) :
CBasePropertyPage(NAME("GrayProp"), pUnk, IDD_PROPPAGE, IDS_PROPPAGE_TITLE),
m_pGray(0)
下面,你还要记得重载CBasePropertyPage 的几个方法哦OnConnect,当属性页创建的时候,会调用这个方法,通过这个方法将IUnknown指针付给Filter。OnActivate 当对话框创建的时候被调用OnReceiveMessage 当对话框接收到窗口消息时被调用OnApplyChanges当用户单击OK或者Apply 按钮来确认对属性进行更新时,调用OnDisconnect 当用户取消Property sheet时调用第五步,保存filter的一个指针通过重载CBasePropertyPage::OnConnect方法将一个指针保存到filter,下面的例子演示了如何通过方法传递过来的参数查询filter支持的接口HRESULT CGrayProp::OnConnect(IUnknown *pUnk)
if (pUnk == NULL)
return E_POINTER;
ASSERT(m_pGray == NULL);
return pUnk-&QueryInterface(IID_ISaturation,
reinterpret_cast&void**&(&m_pGray));
}第六步,初始化对话框通过重载CBasePropertyPage::OnActivate方法来初始化一个对话框,在这个例子里,属性页使用了滑动条,所以,在初始化的第一步就是要初始化控件动态库,然后再初始化slider。HRESULT CGrayProp::OnActivate(void)
INITCOMMONCONTROLSEX
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_BAR_CLASSES;
if (InitCommonControlsEx(&icc) == FALSE)
return E_FAIL;
ASSERT(m_pGray != NULL);
HRESULT hr = m_pGray-&GetSaturation(&m_lVal);
if (SUCCEEDED(hr))
SendDlgItemMessage(m_Dlg, IDC_SLIDER1, TBM_SETRANGE, 0,
MAKELONG(SATURATION_MIN, SATURATION_MAX));
SendDlgItemMessage(m_Dlg, IDC_SLIDER1, TBM_SETTICFREQ,
(SATURATION_MAX - SATURATION_MIN) / 10, 0);
SendDlgItemMessage(m_Dlg, IDC_SLIDER1, TBM_SETPOS, 1, m_lVal);
第七步,处理窗口消息重载CBasePropertyPage::OnReceiveMessage方法来处理用户的输入等消息。如果你不想处理消息,你只需简单调用父类的OnReceiveMessage 即可。无论何时用户改变了属性,都会做下面的事情1 将属性页的m_bDirty设置为TRUE;2调用属性框的IPropertyPageSite::OnStatusChange方法,并传递一个PROPPAGESTATUS_DIRTY,这个标志用来通知property frame应该将Apply按钮可用,CBasePropertyPage::m_pPageSite变量保存着一个IPropertyPageSite接口为了简化步骤,你可以在你的属性页中添加下面的代码private:
void SetDirty()
m_bDirty = TRUE;
if (m_pPageSite)
m_pPageSite-&OnStatusChange(PROPPAGESTATUS_DIRTY);
当用户改变了属性的时候,在OnReceiveMessage方法中调用上面的函数。BOOL CGrayProp::OnReceiveMessage(HWND hwnd,
UINT uMsg, WPARAM wParam, LPARAM lParam)
switch (uMsg)
case WM_COMMAND:
if (LOWORD(wParam) == IDC_DEFAULT)
// User clicked the 'Revert to Default' button.
m_lNewVal = SATURATION_DEFAULT;
m_pGray-&SetSaturation(m_lNewVal);
// Update the slider control.
SendDlgItemMessage(m_Dlg, IDC_SLIDER1, TBM_SETPOS, 1,
m_lNewVal);
SetDirty();
return (LRESULT) 1;
case WM_HSCROLL:
// User moved the slider.
switch(LOWORD(wParam))
case TB_PAGEDOWN:
case SB_THUMBTRACK:
case TB_PAGEUP:
m_lNewVal = SendDlgItemMessage(m_Dlg, IDC_SLIDER1,
TBM_GETPOS, 0, 0);
m_pGray-&SetSaturation(m_lNewVal);
SetDirty();
return (LRESULT) 1;
} // Switch.
// Let the parent class handle the message.
return CBasePropertyPage::OnReceiveMessage(hwnd,uMsg,wParam,lParam);
}第八步,处理属性的改变重载CBasePropertyPage::OnApplyChanges方法来提交属性页的改变,如果用户单击了确定,或者应用按钮,OnApplyChanges方法都会调用到HRESULT CGrayProp::OnApplyChanges(void)
m_lVal = m_lNewV
return S_OK;
}第九步,断开属性页连接重载 CBasePropertyPage::OnDisconnect方法来释放你在OnConnect方法中请求的所有的接口,如果用户没有更新属性,而是 单击了取消按钮,你还要将属性的原始值保存下来。当用户单击取消按钮,但是没有相应的响应这个消息的方法,所以,你要检查用户是否调用了 OnApplyChanges方法,看看例子也好:HRESULT CGrayProp::OnDisconnect(void)
if (m_pGray)
// If the user clicked OK, m_lVal holds the new value.
// Otherwise, if the user clicked Cancel, m_lVal is the old value.
m_pGray-&SetSaturation(m_lVal);
m_pGray-&Release();
m_pGray = NULL;
return S_OK;
}第十步,支持com的注册最后一步就是要支持com的注册,因此 属性框才能够创建你属性页的实例,首先在全局数组g_Templates添加一个类厂模板的说明。这个全局的数组是你的DLL中创建的所有的com对象都要用到的。const AMOVIESETUP_FILTER FilterSetupData =
CFactoryTemplate g_Templates[] =
// This entry is for the filter.
&CLSID_GrayFilter,
CGrayFilter::CreateInstance,
&FilterSetupData
// This entry is for the property page.
L"Saturation Props",
&CLSID_SaturationProp,
CGrayProp::CreateInstance,
NULL, NULL
如果你用下面的方式声明全局数组,数组的大小就会自动地得到修改int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);同时,还要在属性页类中添加一个CreateInstance方法static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)
CGrayProp *pNewObject = new CGrayProp(pUnk);
if (pNewObject == NULL)
*pHr = E_OUTOFMEMORY;
return pNewO
如果想测试属性页,可以注册DLL,然后将filter加载到GraphEdit,鼠标右击来查看filter的属性。
采集参数的设置采集前需要对要采集的视频格式、图像质量进行设置,如视频的分辨率、帧率和数据格式,图像的亮度、色度和饱和度参数设置等。下面分别对这两种设置进行讲述。1.视频格式设置对采集设备的参数进行配置,首先确定设备的类型:VFW、WDM驱动模型。目前流行的采集设备大部分采用WDM模式,采集设备在 DirectShow中被当做一个滤波器组件,所以配置采集设备就是对该滤波器的引脚进行设置。在确保滤波器链表完全建立前,可以使用如下的过程配置视频 格式。void CCaptureClass::ConfigCameraPin(HWND hwndParent)
IAMStreamConfig *pSC;
//流配置接口
ISpecifyPropertyPages *pS
//属性页接口
//只有停止后,才能进行引脚属性的设置
m_pMC-&Stop();
//首先查询捕获CAPTURE、视频Video接口
hr = m_pCapture-&FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video, m_pBF,
IID_IAMStreamConfig, (void **)&pSC);
//所有属性页结构体
hr = pSC-&QueryInterface(IID_ISpecifyPropertyPages, (void **)&pSpec);
if(hr == S_OK)
hr = pSpec-&GetPages(&cauuid);
//获取所有属性页
//显示属性页
hr = OleCreatePropertyFrame(hwndParent, 30, 30, NULL, 1,
(IUnknown **)&pSC, cauuid.cElems,
(GUID *)cauuid.pElems, 0, 0, NULL);
//释放内存、资源
CoTaskMemFree(cauuid.pElems);
pSpec-&Release();
pSC-&Release();
//回复运行
m_pMC-&Run();
}上述代码首先以视频捕获方式获取流配置接口,在该接口下查询属性页接口,然后获取所有属性页,接着显示获取的属性页,最后释放资源。在显示了属性页后用户就可以对其属性页的对话框进行设置了,运行后的结果如图9-1所示。 (点击查看大图)图9-1
视频格式属性设置2.图像参数设置图像参数设置类似于视频格式配置,根据设备的驱动类型VFW、WDM使用不同的技术配置设备的参数,这里我们同样假定采集设备的类型为WDM,配置过程如下。void CCaptureClass::ConfigCameraFilter(HWND hwndParent)
HRESULT hr=0;
ISpecifyPropertyPages *pP
hr = m_pBF-&QueryInterface(IID_ISpecifyPropertyPages, (void **)&pProp);
if (SUCCEEDED(hr))
//获取滤波器名称和IUnknown接口指针
FILTER_INFO FilterI
hr = m_pBF-&QueryFilterInfo(&FilterInfo);
IUnknown *pFilterU
m_pBF-&QueryInterface(IID_IUnknown, (void **)&pFilterUnk);
//显示该页
CAUUID caGUID;
pProp-&GetPages(&caGUID);
OleCreatePropertyFrame(
hwndParent,
//Reserved
FilterInfo.achName, //对话框标题
//该滤波器的目标数目
&pFilterUnk,
//目标指针数组
caGUID.cElems,
//属性页数目
caGUID.pElems,
//属性页的CLSID数组
//本地标识
//Reserved
//释放内存、资源
CoTaskMemFree(caGUID.pElems);
pFilterUnk-&Release();
FilterInfo.pGraph-&Release();
pProp-&Release();
m_pMC-&Run();
}捕获滤波器属性是对图像参数进行配置和修改,包括图像参数、白平衡和模式控制。这些参数一旦更改,预览的视频图像马上起作用。当调整到合适的情况下,单击"确定"按钮,关闭该对话框,运行后的结果如图9-2所示。 (点击查看大图)图9-2
运行后的结果
Filter 过滤器 创建,配置和简单的使用
Filter过滤器创建配置和简单的用法
Java Servlet 中 FilterConfig 的用法
用户在配置filter时,可以使用为 filter 配置一些初始化参数,当 web 容器实例化 Filter 对象,调用其 init 方法时,会把封装了 filter 初始化参数的 filterCon...
创建Filter步骤
创建Filter步骤:
创建Filter处理类
必须实现javax.servlet.Filter,该接口有init()完成filter初始化,destroy()完成资源回收,doFilter()过...
在MyEclipse创建Filter
问题描述:
用MyEclipse创建Filter,在New中没有Filter这一项,怎么调出来?
解决方案:...
创建Filter类
创建 Filter 必须实现 javax.servlet.Filter 接口, 在该接口中定义了如下三个方法。
void init ( FilterConfig config ): 用于完成...
directShow 属性页的制作,为CBall filter加了一个属性页具体为分以下步骤: 1.在要显示属性的类中继承现ISpecifyPropertyPages类,并实现此类的GetPages(...
在很多场合下会存在这样的需求,那就是使用方在实际使用控件之前就想控件已经做了相应的处理比如加载的控件版本不正确等,或者需要在加载时才确定能够使用的功能集;这个时候传统的配置文件已经无法满足这种类型的需...
DirectShow Filter 开发典型例子分析 ——字幕叠加 (FilterTitleOverlay)1
本文分析一下《DirectShow开发指南》中的一个典型的Transform Fi...
(转)如何创建Filter的属性页
http://blog.csdn.net/aoosang/article/details/381199
IEnumFilters* pE HRESULT if (pigb) {
hr = pigb-& EnumFilters(&pEnum);
if (FAILED(hr)) ...
没有更多推荐了,

我要回帖

更多关于 指针解引 的文章

 

随机推荐