Public Type udtGUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type==================================
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
============================================
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
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type==================================
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
============================================
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
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
type udtGUID = record
Data1: LongInt;
Data2: Integer;
Data3: Integer;
Data4: array [0..6] of BYTE;
end;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
Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = $1; // 应该是。。偶也没具体试过 :-<
Const INTERFACESAFE_FOR_UNTRUSTED_DATA = $2;
Const E_NOINTERFACE = $80004002;
Const E_FAIL = $H80004005;
Const MAX_GUIDLEN = 40;
Rc:LongInt;
rClsId: udtGUID;
IID: string;
bIID: array of BYTE; pdwSupportedOptions := INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _INTERFACESAFE_FOR_UNTRUSTED_DATA;
If riid <> 0 Then
begin
CopyMemory(rClsId, @riid, SizeOf(rClsId));
bIID := String$(MAX_GUIDLEN, 0); // 不清楚了 :-<
Rc := StringFromGUID2(rClsId, bIID, MAX_GUIDLEN); // or &bIID;
Rc = Pos(' ', bIID) - 1; // 没把握...唉。。
IID = Left$(UCase(bIID), Rc); // 不会 ;-< case IID of
IID_IDispatch:
pdwEnabledOptions := IIf(m_fSafeForScripting, _INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0);
Exit;
IID_IPersistStorage,IID_IPersistStream,_IID_IPersistPropertyBag:
pdwEnabledOptions := IIf(m_fSafeForInitializing, _INTERFACESAFE_FOR_UNTRUSTED_DATA, 0);
Exit;
else:
raise Exception.CreateFrm('Error %d', [E_NOINTERFACE]);
Exit;
end;
end;
不好意思了 偶尽我所能 :-<....