NetAktiv
Senior HTML'ler
Hallo,
will man lästige Abfragen beim Aufruf einer ActiveX-DLL aus einem Browser-Script beim IE vermeiden, dann muss man das Interface IObjectSafety implementieren. Ich bin dabei auf die Seite How to implement IObjectSafety in VB.Net - Sujith Nair - Site Home - MSDN Blogs gestoßen und habe versucht, das wie unten nachzuvollziehen. Allerdings kam bei mir mit VS2010 der Fehler, dass die Guid aus dem Beispiel fehlerhaft sei (das lag an der nicht-Hex HJ20). Ich habe das auf 0020 geändert. Aber bei mir kommt beim Erstellen des Objekts immer noch diese Sicherheitsabfrage.
Muss denn diese Guid stimmen oder kann man eine beliebige wählen (hab leider kein anderes Beispiel gefunden)?
Was kann denn sonst die Ursache sein?
Hinweis: Ich habe noch in jede Funktion ein WriteDebugInfo addiert und nur die Methode GetVersion wird protokolliert, also werden die Interface-Methoden nicht mal aufgerufen. Bei einer DLL, die ich für VB6 erstellt habe, werden diese Methoden vor jedem Aufruf einer anderen Methode der Klasse aufgerufen.
will man lästige Abfragen beim Aufruf einer ActiveX-DLL aus einem Browser-Script beim IE vermeiden, dann muss man das Interface IObjectSafety implementieren. Ich bin dabei auf die Seite How to implement IObjectSafety in VB.Net - Sujith Nair - Site Home - MSDN Blogs gestoßen und habe versucht, das wie unten nachzuvollziehen. Allerdings kam bei mir mit VS2010 der Fehler, dass die Guid aus dem Beispiel fehlerhaft sei (das lag an der nicht-Hex HJ20). Ich habe das auf 0020 geändert. Aber bei mir kommt beim Erstellen des Objekts immer noch diese Sicherheitsabfrage.
Muss denn diese Guid stimmen oder kann man eine beliebige wählen (hab leider kein anderes Beispiel gefunden)?
Was kann denn sonst die Ursache sein?
Hinweis: Ich habe noch in jede Funktion ein WriteDebugInfo addiert und nur die Methode GetVersion wird protokolliert, also werden die Interface-Methoden nicht mal aufgerufen. Bei einer DLL, die ich für VB6 erstellt habe, werden diese Methoden vor jedem Aufruf einer anderen Methode der Klasse aufgerufen.
Code:
Public Class SafeCall
Implements IObjectSafety
'declare constants
Private Const SAFE_UNTRUSTED_CALLER As Integer = &H1
Private Const SAFE_UNTRUSTED_DATA As Integer = &H2
'Now we need to implement GetInterfaceSafetyOptions and SetInterfaceSafetyOptions in the class.
Public Function GetInterfaceSafetyOptions(ByRef iid As Guid, ByRef pdwSupportedOptions As Integer, _
ByRef pdwEnabledOptions As Integer) As Integer Implements IObjectSafety.GetInterfaceSafetyOptions
pdwSupportedOptions = SAFE_UNTRUSTED_CALLER Or SAFE_UNTRUSTED_DATA
pdwEnabledOptions = SAFE_UNTRUSTED_CALLER Or SAFE_FOR_UNTRUSTED_DATA
Return 0
End Function
Public Function SetInterfaceSafetyOptions(ByRef iid As Guid, ByVal dwOptionSetMask As Integer, _
ByVal dwEnabledOptions As Integer) As Integer Implements IObjectSafety.SetInterfaceSafetyOptions
Return 0
End Function
Public Function GetVersion() As String
Return (System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString())
End Function
End Class
<ComImport()> _
<Guid("CB6ADC81-93C1-11CF-0020-00805F2CD064")> _
<InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IObjectSafety
Function GetInterfaceSafetyOptions(ByRef iid As Guid, ByRef pdwSupportedOptions As Integer, ByRef pdwEnabledOptions As Integer) As Integer
Function SetInterfaceSafetyOptions(ByRef iid As Guid, ByVal dwOptionSetMask As Integer, ByVal dwEnabledOptions As Integer) As Integer
End Interface
Zuletzt bearbeitet: