原文http://support.microsoft.com/kb/182598/zh-cn

从 Visual Basic 6.0 CD-ROM(安装目录) 中获取 OLE 自动化类型库生成器。若要执行此操作将所有四个文件从 /Common/Tools/VB/Unsupprt/Typlib/ 文件夹复制到您的项目文件夹中。

将以下文本复制到记事本,,将文件保存为 Objsafe.odl 项目文件夹中:

[

uuid(C67830E0-D11D-11cf-BD80-00AA00575603),

helpstring("VB IObjectSafety Interface"),

version(1.0)

]

library IObjectSafetyTLB

{

importlib("stdole2.tlb");

[

uuid(CB5BDC81-93C1-11cf-8F20-00805F2CD064),

helpstring("IObjectSafety Interface"),

odl

]

interface IObjectSafety:IUnknown {

[helpstring("GetInterfaceSafetyOptions")]

HRESULT GetInterfaceSafetyOptions(

[in]  long  riid,

[in]  long *pdwSupportedOptions,

[in]  long *pdwEnabledOptions);

[helpstring("SetInterfaceSafetyOptions")]

HRESULT SetInterfaceSafetyOptions(

[in]  long  riid,

[in]  long  dwOptionsSetMask,

[in]  long  dwEnabledOptions);

}

}

在命令提示符使用 CD <path>

将移动到项目文件夹,然后键入以下命令来生成.tlb 文件的命令:MKTYPLIB objsafe.odl /tlb objsafe.tlb

利用tlb注册工具将文件注册

注册工具可以在http://download.csdn.net/source/2841891下载到

从 Visual Basic 创建 ActiveX 控件项目

在 项目 菜单上单击 引用 ,浏览到并添加 Objsafe.tlb,您早先创建的。

添加一个新的模块到您的项目与下面的代码并命名模块 basSafeCtl

Option Explicit

Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"

Public Const IID_IPersistStorage = _
        "{0000010A-0000-0000-C000-000000000046}"

Public Const IID_IPersistStream = _
        "{00000109-0000-0000-C000-000000000046}"

Public Const IID_IPersistPropertyBag = _
        "{37D84F60-42CB-11CE-8135-00AA004BB851}"

Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1

Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2

Public Const E_NOINTERFACE = &H80004002

Public Const E_FAIL = &H80004005

Public Const MAX_GUIDLEN = 40

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
         (pDest As Any, pSource As Any, ByVal ByteLen As Long)

Public Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As _
         Any, ByVal lpstrClsId As Long, ByVal cbMax As Integer) As Long

Public Type udtGUID

Data1 As Long

Data2 As Integer

Data3 As Integer

Data4(7) As Byte

End Type

Public m_fSafeForScripting As Boolean

Public m_fSafeForInitializing As Boolean

Sub Main()

m_fSafeForScripting = True

m_fSafeForInitializing = True

End Sub

在工程属性中把启动对象改成Sub Main确保上述代码会被执行。m_fSafeForScripting 和m_fSafeForInitializing两件变量的值分别指定了脚本安全和初始化安全取值。

打开您的控件的代码窗口。将下面的代码行添加到声明部分中

Implements IObjectSafety

将下面的两个过程复制到您的控件的代码

Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _
      Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)

Dim Rc      As Long

Dim rClsId  As udtGUID

Dim IID     As String

Dim bIID()  As Byte

pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _
                                INTERFACESAFE_FOR_UNTRUSTED_DATA

If (riid <> 0) Then

CopyMemory rClsId, ByVal riid, Len(rClsId)

bIID = String$(MAX_GUIDLEN, 0)

Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)

Rc = InStr(1, bIID, vbNullChar) - 1

IID = Left$(UCase(bIID), Rc)

Select Case IID

Case IID_IDispatch

pdwEnabledOptions = IIf(m_fSafeForScripting, _

INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)

Exit Sub

Case IID_IPersistStorage, IID_IPersistStream, _

IID_IPersistPropertyBag

pdwEnabledOptions = IIf(m_fSafeForInitializing, _

INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)

Exit Sub

Case Else

Err.Raise E_NOINTERFACE

Exit Sub

End Select

End If

End Sub

Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _
      Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long)

Dim Rc          As Long

Dim rClsId      As udtGUID

Dim IID         As String

Dim bIID()      As Byte

If (riid <> 0) Then

CopyMemory rClsId, ByVal riid, Len(rClsId)

bIID = String$(MAX_GUIDLEN, 0)

Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)

Rc = InStr(1, bIID, vbNullChar) - 1

IID = Left$(UCase(bIID), Rc)

Select Case IID

Case IID_IDispatch

If ((dwEnabledOptions And dwOptionsSetMask) <> INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then

Err.Raise E_FAIL

Exit Sub

Else

If Not m_fSafeForScripting Then

Err.Raise E_FAIL

End If

Exit Sub

End If

Case IID_IPersistStorage, IID_IPersistStream, IID_IPersistPropertyBag

If ((dwEnabledOptions And dwOptionsSetMask) <> _

INTERFACESAFE_FOR_UNTRUSTED_DATA) Then

Err.Raise E_FAIL

Exit Sub

Else

If Not m_fSafeForInitializing Then

Err.Raise E_FAIL

End If

Exit Sub

End If

Case Else

Err.Raise E_NOINTERFACE

Exit Sub

End Select

End If

End Sub

生成.ocx控件,用web页面引用。控件与页面交互时IE不再提示安全问题。

*继承IObjectSafety接口,实现vb activeX控件安全性(IE不提示安全问题)相关推荐

  1. [转]使用C#开发ActiveX控件全攻略

    先说说ActiveX的基本概念. 根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组 ...

  2. C# ActiveX控件开发

    前言: 这段时间因为工作的需要,研究了一下ActiveX控件.总结如下: 先说说ActiveX的基本概念. 根据微软权威的软件开发指南MSDN(Microsoft Developer Network) ...

  3. 使用C#开发ActiveX控件全攻略

    先说说ActiveX的基本概念. 根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组 ...

  4. [转]使用C#开发ActiveX控件

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  5. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  6. C#开发B/S方式ActiveX控件

    1. 概念 ActiveX 是一个开放的集成平台,为开发人员. 用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法.使用 ActiveX, ...

  7. 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件 用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器 ...

  8. 用C#编写ActiveX控件(二) 转载

    在我的上一篇blog中,已经实现了一个最基本的ActiveX控件.当然,我们编写的任务还没有完成.首先,我们先尝试实现和JS的交互能力.        我们在Demo中加入ShowMessage方法: ...

  9. 关于用C#编写ActiveX控件3(转)

    在我的上一篇blog中,已经实现了一个最基本的ActiveX控件.当然,我们编写的任务还没有完成.首先,我们先尝试实现和JS的交互能力. 我们在Demo中加入ShowMessage方法: public ...

最新文章

  1. Git npm相关命令
  2. 【Docker】ADD COPY no such file or directory
  3. Java入门第三季——Java中的集合框架(中):MapHashMap
  4. python输入输出代码_python基本输入输出代码示例
  5. 完全背包——方案个数 UVA11137 Ingenuous Cubrency
  6. 微信小程序 自定义顶部状态栏
  7. 如何安装mysql8.0后配置_MYSQL8.0安装配置
  8. CT计算机组成及其特点,浅析CT图像的特点及常用扫描方式
  9. 【Spark】(task5)SparkML基础(分类 | 聚类模型)
  10. 《从0到1上线微信小游戏》第七节 微信排行榜和好友分享功能
  11. android银行卡输入密码,android 仿微信添加银行卡时输入支付密码
  12. linux使用grep查找文件内容,Linux中使用grep命令搜索文件名及文件内容的方法
  13. 跟着柴毛毛学Spring(1)——纵观Spring
  14. freeswitch对接电信线路VOLTE视频通话
  15. 优维科技将参加微软加速器·上海一期Demo Day
  16. 路由器攻击java,局域网中ARP攻击和浏览器挟持的解决方法
  17. 致微信:我们什么时候重新定义群聊?
  18. backgroundimage
  19. 用计算机怎样提交作业,怎样交计算机作业.doc
  20. r语言 html gif,推荐 :6步教你用R语言制作动图

热门文章

  1. 学生会计算机办公软件培训制度,学生会电脑培训策划书范文
  2. 【华为云技术分享】一文看懂什么是汽车OTA
  3. 各浏览器User-Agent用户代理字符串整理
  4. 关于我unity创建2d横版游戏的这件事1
  5. vhs预设_如何在Linux中数字化VHS磁带
  6. 20P60 PR模板预设10 VHS专业预设包制作旧镜头复古磁带效果含背景音乐
  7. python画蜡烛图_Python量化交易-绘制蜡烛图 !这个图不像你的钱哦!
  8. CSS visibility
  9. 还在找免费的能提供HTTPS协议外链的图床?这个开源插件轻松完成
  10. linux 扩展pam支持第三方认证