日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 *继承IObjectSafety接口,实现vb activeX控件安全性(IE不提示安全问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文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頁面引用??丶c頁面交互時IE不再提示安全問題。

總結

以上是生活随笔為你收集整理的*继承IObjectSafety接口,实现vb activeX控件安全性(IE不提示安全问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。