Bu makalede, denetimlerini komut dizilerinde kullanmak ve başlatmak için güvenli olarak işaretlemek için Visual Basic denetimde ıobjectsafety arabirimini nasıl. Varsayılan olarak, Visual Basic denetimleri bileşen kategorisini kayıt defterindeki denetimin komut dizilerinde kullanmak ve başlatmak için güvenli olarak işaretlemek için kullanır. ıobjectsafety arabirimini uygulayan tercih edilen yöntemdir. Bu makalede, bu arabirim, Visual Basic denetimleri gerçekleştirmek için gereken tüm kodunu içerir.
Lütfen bir denetimi yalnızca, aslında güvenli ise, güvenli işaretlenmelidir olduğunu unutmayın. Bu makalede denetimlerini komut dizilerinde kullanmak ve başlatmak için güvenli olarak işaretleme ayrıntılarını tanımlayın; Bu, yalnızca kodda nasıl yapacağınızı göstermektedir. Bu ayrıntılı bir açıklaması için ınternet istemcisi Software Development Kit'e (SDK) belgelerine başvurun. "Güvenli başlatma ve komut dizileri için ActiveX denetimleri" Component Development bölümünde bakın.
UYARı: Bu makalede açıklanan, bir veya daha fazlası aşağıdaki işlevleri: VarPtr, VarPtrArray, VarPtrStringArray, StrPtr ve ObjPtr. Bu işlevler, Microsoft Teknik destek tarafından desteklenmiyor. Visual Basic belgelerindeki belgelenmemiştir ve sağlanan bu Knowledge Base makalesinde "olduğu gibi." Microsoft, Visual Basic gelecekteki sürümlerde kullanılabilir olduğunu garanti etmez. Bu işlevler hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
199824
(http://support.microsoft.com/kb/199824/EN-US/
)
Nasıl yapılır: adresini değişkenleri Visual Basic'te Al...
Aşağıdaki adımlar Basit bir Visual Basic denetimi oluşturma ve komut dizilerinde kullanmak ve başlatmak için güvenli işaretler nasıl gösterilmektedir.
Bu örnekte, oluşturduğunuz tüm dosyaları kaydedebileceğiniz yeni bir klasör oluşturun.
OLE Otomasyonu tür kitaplığı Oluşturucu, Visual Basic 6.0 CD-ROM'undan alın. Bunu yapmak için <a0></a0>, tüm dört dosya \Common\Tools\VB\Unsupprt\Typlib\ klasöründen proje klasörünüze kopyalayın. Not: VIsual Basic 5.0 \VB5.0\Tools\Unsupprt\Typlib\ klasöründeki tüm dosyaları kopyalamak.
Aşağıdaki metni Not Defteri'ne kopyalayın ve dosyayı Objsafe.odl olarak <a1>Proje</a1> klasöründeki kaydedin:
[
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);
}
}
Bir komut isteminde <path>CD'YI kullanın... komutunu proje klasöre gidin ve bir .tlb dosyası oluşturmak için aşağıdaki komutu yazın:
MKTYPLIB objsafe.odl TLB objsafe.tlb
Visual Basic, bir ActiveX denetimi) projesi oluşturun. Özellikler listesinde projenin IObjSafety ve DemoCtl için denetimin adını değiştirin. Denetimi cmdTest adlı bir KomutDüğmesi yerleştirin. The cmdTest Tıklat olay işleyicisinde bir MsgBox "Test" ifadesi yerleştirin.
Proje menüsünde Başvurular, göz tıklatıp, daha önce oluşturduğunuz Objsafe.tlb ekleyin.
Projenizi aşağıdaki kod yeni bir modül ekleyin ve modül basSafeCtl adı:
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
Proje Özellikleri ', yukarıdaki Sub Main'nı çalıştırmak için Sub Main için başlangıç nesne değiştirin. M_fSafeForScripting ve m_fSafeForInitializing değişkenleri güvenli komut dosyası ve/veya başlatma değişkenler için değerleri belirtmek için kullanın.
Denetimi <a1>Kod</a1> penceresini açın. (Hemen sonra Seçenek Belirtik veya ilk olarak) bildirisi bölümüne aşağıdaki kod satırını ekleyin:
Implements IObjectSafety
Aşağıdaki iki yordam denetimleri kodunuzu Kopyala:
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
Dosya menüsünde, proje ve dosyaları kaydedin. OCX bir proje dosyasından olun. Denetimi şimdi ıobjectsafety arabirimini uygular. Sınamak için <a0></a0>, .htm dosyasını denetimi ekleyin.
MkTypLib.exe önceden ile Platform Software Development Kit'e (Microsoft Visual Studio 6.0 ile gelen SDK) birlikte eski bir araçtır. Geçerli Platform SDK MkTypLib.exe aracı ile birlikte verilmez değil.
MkTypLib gerekti?inde hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesine bakın:
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:182598
(http://support.microsoft.com/kb/182598/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.