html5 api activex <objiect,【ActiveX】实现安全接口

1 #include //for IObjectSafety; in ActiveX SDK

2 class CtryISafeObjectCtrl : publicCOleControl3 {4 DECLARE_DYNCREATE(CtryISafeObjectCtrl)5 //........................................................................6 //ISafeObject

7 DECLARE_INTERFACE_MAP()8 BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)9 STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (10 /*[in]*/REFIID riid,11 /*[out]*/ DWORD __RPC_FAR *pdwSupportedOptions,12 /*[out]*/ DWORD __RPC_FAR *pdwEnabledOptions13 );14

15 STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (16 /*[in]*/REFIID riid,17 /*[in]*/DWORD dwOptionSetMask,18 /*[in]*/DWORD dwEnabledOptions19 );20 END_INTERFACE_PART(ObjSafe);21 //ISafeObject22 //........................................................................

23 。。。。。24 };25 在objsafe.h头文件中有ISafeObject接口的相关定义26 3。在tryISafeObjectCtrl.cpp中ISafeObject接口的相关实现:27 //.............................................................................28 //Interface map for IObjectSafety

29 BEGIN_INTERFACE_MAP( CtryISafeObjectCtrl, COleControl )30 INTERFACE_PART(CtryISafeObjectCtrl, IID_IObjectSafety, ObjSafe)31 END_INTERFACE_MAP()32 //.............................................................................33 //IObjectSafety member functions34 //Delegate AddRef, Release, QueryInterface

35 ULONG FAR EXPORT CtryISafeObjectCtrl::XObjSafe::AddRef()36 {37 METHOD_PROLOGUE(CtryISafeObjectCtrl, ObjSafe)38 return pThis->ExternalAddRef();39 }40 ULONG FAR EXPORT CtryISafeObjectCtrl::XObjSafe::Release()41 {42 METHOD_PROLOGUE(CtryISafeObjectCtrl, ObjSafe)43 return pThis->ExternalRelease();44 }45 HRESULT FAR EXPORT CtryISafeObjectCtrl::XObjSafe::QueryInterface(46 REFIID iid, void FAR* FAR*ppvObj)47 {48 METHOD_PROLOGUE(CtryISafeObjectCtrl, ObjSafe)49 return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);50 }51 const DWORD dwSupportedBits =

52 INTERFACESAFE_FOR_UNTRUSTED_CALLER |

53 INTERFACESAFE_FOR_UNTRUSTED_DATA;54 const DWORD dwNotSupportedBits = ~dwSupportedBits;55 //.............................................................................56 //CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions57 //Allows container to query what interfaces are safe for what. We're58 //optimizing significantly by ignoring which interface the caller is59 //asking for.

60 HRESULT STDMETHODCALLTYPE61 CtryISafeObjectCtrl::XObjSafe::GetInterfaceSafetyOptions(62 /*[in]*/REFIID riid,63 /*[out]*/ DWORD __RPC_FAR *pdwSupportedOptions,64 /*[out]*/ DWORD __RPC_FAR *pdwEnabledOptions)65 {66 METHOD_PROLOGUE(CtryISafeObjectCtrl, ObjSafe)67 HRESULT retval =ResultFromScode(S_OK);68 //does interface exist?

69 IUnknown FAR*punkInterface;70 retval = pThis->ExternalQueryInterface(&riid,71 (void * *)&punkInterface);72 if (retval != E_NOINTERFACE) { //interface exists

73 punkInterface->Release(); //release it--just checking!

74 }75

76 //we support both kinds of safety and have always both set,77 //regardless of interface

78 *pdwSupportedOptions = *pdwEnabledOptions =dwSupportedBits;79 return retval; //E_NOINTERFACE if QI failed

80 }81 /////////////////////////////////////////////////////////////////////////////

82 //CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions83 //Since we're always safe, this is a no-brainer--but we do check to make84 //sure the interface requested exists and that the options we're asked to85 //set exist and are set on (we don't support unsafe mode).

86 HRESULT STDMETHODCALLTYPE87 CtryISafeObjectCtrl::XObjSafe::SetInterfaceSafetyOptions(88 /*[in]*/REFIID riid,89 /*[in]*/DWORD dwOptionSetMask,90 /*[in]*/DWORD dwEnabledOptions)91 {92 METHOD_PROLOGUE(CtryISafeObjectCtrl, ObjSafe)93

94 //does interface exist?

95 IUnknown FAR*punkInterface;96 pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);97 if (punkInterface) { //interface exists

98 punkInterface->Release(); //release it--just checking!

99 }100 else { //interface doesn't exist

101 returnResultFromScode(E_NOINTERFACE);102 }103 //can't set bits we don't support

104 if (dwOptionSetMask &dwNotSupportedBits) {105 returnResultFromScode(E_FAIL);106 }107

108 //can't set bits we do support to zero

109 dwEnabledOptions &=dwSupportedBits;110 //(we already know there are no extra bits in mask )

111 if ((dwOptionSetMask & dwEnabledOptions) !=

112 dwOptionSetMask) {113 returnResultFromScode(E_FAIL);114 }115

116 //don't need to change anything since we're always safe

117 returnResultFromScode(S_OK);118 }

1.功能 摄像头控件用于在Web编程中辅助您完成图像采集、截图,并上传到服务器当中,支持USB外置摄像头、内置摄像头及部分型号高拍仪设备. 该摄像头控件工作在客户端浏览器中,支持多种服务器端编程技术及部署环境,支持asp、jsp、php、asp.net等常见的服务器端编程技术,图像采集结果支持jpg和bmp格式图片。 2.控件集成jsp,asp,html,php使用说明 控件以cab压缩包格式发行,在项目中集成控件时需要复制cab文件到项目中,然后在需要进行图像采集的页面中使用<object></object>的方式引入该控件。完整的引用控件的示例如下: 1 <object classid="clsid:1122dfdf-5fds6-4fds-8fds2-947fdsfdsfds8" 2 3 id="Camer" codebase="http://127.0.0.1:8080/imagesUpload/demo.cab#version=1,0,0,8" width="500px" height="400px"> 4 5 </object> 上面的示例演示了如何在项目的页面中引用控件,注意红色标示的部分用于确定控件cab压缩包所在路径,要结合项目中的目录划分自行制定到控件压缩包的路径。 除了要在html页面中引入控件以外,客户端浏览器在访问控件所在页面时,需要提前调整浏览器设定,需要启用 ActiveX技术,因控件未进行数字签名,因此需要启用浏览器的“未签名 ActiveX下载提示”功能及“未签名ActiveX运行提示”功能. 注意:首次运行时,当浏览器有阻止运行,请允许运行 3.控件方法调用说明 01 //启动摄像头 02 Camer.initCamer(0,10); 03 //点击拍照 04 Camer.TakePhoto("D:/test1.bmp"); 05 //关闭摄像头 06 Camer.CloseDev(); 07 //上传已拍照的相片 08 Camer.UpFileNew("D:/test1.bmp","http://127.0.0.1:8080/imagesUpload/upload.jsp"); 09 10 //删除本地照片 11 Camer.DeleteFile("D:/test1.bmp");
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值