• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ActiveX控件web发布问题

ActiveX控件web发布问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了web阻止activex控件,web activex控件,activex控件下载,activex控件,activex控件被阻止等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ActiveX控件web发布问题
描述:

我现在刚在学习做actixex控件,现在遇到一个关于在web上面发布的问题急切希望得到高手的指点。我参考资料通过vs2003工具通过工程向导创建了一个mfc下的ActiveX控件,取名aaa,任何代码未添加。然后想试下该控件在web中的发布效果。于是我通过工具将该直接生成的控件插入到网页中取名default1.html,并和aaa.ocx文件一起放置在iis目录下。然后我通过regsvr32 /u 命令将该控件反注册。然后将我的ie的安全设置关于actixeX控件的设置全部开启。然后输入http://localhost/default1.html可以正常显示该控件。但是当我输入本机的ip地址或者在客户机上运行的时候总是出现一个红X。和前面输入http://localhost/default1.html相比会少一个提示是否允许交互。我通过vs2003里面的工具查看到该控件也在客户机上面安装成功了。调试了几天这个问题始终不能解决。请教csdn里面的高手能帮下我,不知道该问题到底出在哪里?


解决方案1:

什么红叉, 提示什么信息, 问题描述的清楚一点,
应该是安全接口 问题,  中加这些就可以了(适合mfc)
.h文件中加:
BEGIN_INTERFACE_PART(ObjectSafety, IObjectSafety)
STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions);
STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions);
END_INTERFACE_PART(ObjectSafety)
cpp中:
BEGIN_INTERFACE_MAP(your ctrl, COleControl)
  INTERFACE_PART(your ctrl, IID_IObjectSafety, ObjectSafety)
END_INTERFACE_MAP()
STDMETHODIMP your ctrl::XObjectSafety::GetInterfaceSafetyOptions(
REFIID riid, 
DWORD __RPC_FAR *pdwSupportedOptions, 
DWORD __RPC_FAR *pdwEnabledOptions)
{
METHOD_PROLOGUE_EX(your ctrl, ObjectSafety)
if (!pdwSupportedOptions || !pdwEnabledOptions)
{
return E_POINTER;
}
*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
*pdwEnabledOptions = 0;
if (NULL == pThis->GetInterface(&riid))
{
TRACE(_T("Requested interface is not supported.\n"));
return E_NOINTERFACE;
}
// What interface is being checked out anyhow?
OLECHAR szGUID[39];
int i = StringFromGUID2(riid, szGUID, 39);
if (riid == IID_IDispatch)
{
// Client wants to know if object is safe for scripting
*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
return S_OK;
}
else if (riid == IID_IPersistPropertyBag 
  || riid == IID_IPersistStreamInit
  || riid == IID_IPersistStorage
  || riid == IID_IPersistMemory)
{
// Those are the persistence interfaces COleControl derived controls support
// as indicated in AFXCTL.H
// Client wants to know if object is safe for initializing from persistent data
*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
return S_OK;
}
else
{
// Find out what interface this is, and decide what options to enable
TRACE(_T("We didn't account for the safety of this interface, and it's one we support...\n"));
return E_NOINTERFACE;
}
}
STDMETHODIMP your ctrl::XObjectSafety::SetInterfaceSafetyOptions(
REFIID riid, 
DWORD dwOptionSetMask, 
DWORD dwEnabledOptions)
{
METHOD_PROLOGUE_EX(your ctrl, ObjectSafety)
OLECHAR szGUID[39];
// What is this interface anyway?
// We can do a quick lookup in the registry under HKEY_CLASSES_ROOT\Interface
int i = StringFromGUID2(riid, szGUID, 39);
if (0 == dwOptionSetMask && 0 == dwEnabledOptions)
{
// the control certainly supports NO requests through the specified interface
// so it's safe to return S_OK even if the interface isn't supported.
return S_OK;
}
// Do we support the specified interface?
if (NULL == pThis->GetInterface(&riid))
{
TRACE1("%s is not support.\n", szGUID);
return E_FAIL;
}
if (riid == IID_IDispatch)
{
TRACE(_T("Client asking if it's safe to call through IDispatch.\n"));
TRACE(_T("In other words, is the control safe for scripting?\n"));
if (INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwOptionSetMask && INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwEnabledOptions)
{
return S_OK;
}
else
{
return E_FAIL;
}
}
else if (riid == IID_IPersistPropertyBag 
  || riid == IID_IPersistStreamInit
  || riid == IID_IPersistStorage
  || riid == IID_IPersistMemory)
{
TRACE(_T("Client asking if it's safe to call through IPersist*.\n"));
TRACE(_T("In other words, is the control safe for initializing from persistent data?\n"));
if (INTERFACESAFE_FOR_UNTRUSTED_DATA == dwOptionSetMask && INTERFACESAFE_FOR_UNTRUSTED_DATA == dwEnabledOptions)
{
return NOERROR;
}
else
{
return E_FAIL;
}
}
else
{
TRACE1("We didn't account for the safety of %s, and it's one we support...\n", szGUID);
return E_FAIL;
}
}
STDMETHODIMP_(ULONG) your ctrl::XObjectSafety::AddRef()
{
METHOD_PROLOGUE_EX_(your ctrl, ObjectSafety)
return (ULONG)pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) your ctrl::XObjectSafety::Release()
{
METHOD_PROLOGUE_EX_(your ctrl, ObjectSafety)
return (ULONG)pThis->ExternalRelease();
}
STDMETHODIMP your ctrl::XObjectSafety::QueryInterface(
REFIID iid, LPVOID* ppvObj)
{
METHOD_PROLOGUE_EX_(your ctrl, ObjectSafety)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}

解决方案2:

你的组件要实现IObjectSafety接口,具体加上下面两行:
class CXXX:public IObjectSafetyImpl<CFactory, INTERFACESAFE_FOR_UNTRUSTED_CALLER>,
COM_INTERFACE_ENTRY(IObjectSafety)
也就是你除了将安全属性设置成允许下载末签名的组件,还要设置一下允许下载末标记为安全的组件,否则你可以向上

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ----------------ActiveX控件Web中应用问题-----------
  • ATLActiveX控件应用于web的较深入的问题,请高手解决!!!
  • web上如何才能显示有窗口的Activex控件?代码怎么写?
  • 怎样解决ActiveX与Web间字符串传递问题
  • ActiveX,Web脚本,Exe应用程序3者通讯问题
  • 100分求解:MFCActiveX控件事件无法通知Web,急!!!在线等
  • 通过web调用activex打印本地文件的问题。
  • 如何在web中用html语言调用activex的属性、方法?
  • 如何在Web显示ActiveX的安装过程
  • Activex控件中调用WEB页面的JS代码

相关文章

  • 2017-06-04 COM高手请进!
  • 2017-06-04 ActiveX控件注册问题
  • 2017-06-04 atlcomdll函数怎样用参数传出汉字
  • 2017-06-05 如何在DLL中用多线程实现进度条?
  • 2017-06-04 vc6制作了一个OCX网页里面就看不见
  • 2017-06-04 dbgrid问题
  • 2017-06-05 请问哪位大虾做过mpeg文件的播放器阿,求教
  • 2017-06-05 一个无窗体程序console,怎么获得其线程的ID?(进程ID?)或者其HWND?
  • 2017-06-04 特别奇怪的问题
  • 2017-06-05 如何在service中使用hook呢?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何等待CreateProcess创建的进程结束?
    • 跨进程消息的传递,用到了一个WM_COPYDATA的函数但是CString类型就传了个空内容过去???
    • 怎样知道Powerpoint中的Textframe当前能容纳多少汉字??
    • 如何在WORD中实现移动控件
    • 求助VC如何对WORD的文字颜色实现自动化
    • jameshooo请进[来者都有分哈]
    • 请问vs2005下插件开发,想像VA插件那样显示个toolbar,who有代码给我看一下
    • 最后50分关于close线程的问题
    • 要在原有的程序里实现语音控制,大家给个方案吧?
    • 动态调用DLL里定义的类是不可能的吗?(搜遍论坛无答案)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有