Пример использования CoCreateInstanceEx в Visual Basic - VB
Формулировка задачи:
Подскажите ссылочку или примерчик по использованию CoCreateInstanceEx в Visual Basic. Или аналогичный классик в .NET -e.
Заранее блогодарен.
Решение задачи: «Пример использования CoCreateInstanceEx в Visual Basic»
textual
Листинг программы
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Type COSERVERINFO
dwReserved1 As Long ‘ DWORD
pwszName As Long ‘ LPWSTR
pAuthInfo As Long ‘ COAUTHINFO*
dwReserved2 As Long ‘ DWORD
End Type
' A Visual Basic function named CreateObjectEx, which allows
' the user to create objects locally as well as remotely.
Private Type MULTI_QI
piid As Long ' const IID*
pItf As Object ' IUnknown*
hr As Long ' HRESULT
End Type
Enum CLSCTX
CLSCTX_INPROC_SERVER = 1
CLSCTX_INPROC_HANDLER = 2
CLSCTX_LOCAL_SERVER = 4
CLSCTX_REMOTE_SERVER = 16
CLSCTX_SERVER = CLSCTX_INPROC_SERVER + CLSCTX_LOCAL_SERVER + _
CLSCTX_REMOTE_SERVER
CLSCTX_ALL = CLSCTX_INPROC_SERVER + CLSCTX_INPROC_HANDLER + _
CLSCTX_LOCAL_SERVER + CLSCTX_REMOTE_SERVER
End Enum
Private Const GMEM_FIXED = &H0
Private Const IID_IDispatch As String = _
'{00020400-0000-0000-C000-000000000046}'
Private Declare Function GlobalAlloc Lib 'kernel32' _
(ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib 'kernel32' _
(ByVal hMem As Long) As Long
Private Declare Function IIDFromString Lib 'OLE32' _
(ByVal lpszIID As String, ByVal piid As Long) As Long
Private Declare Function CLSIDFromString Lib 'OLE32' _
(ByVal lpszCLSID As String, pclsid As GUID) As Long
Private Declare Function CLSIDFromProgID Lib 'OLE32' _
(ByVal lpszProgID As String, pclsid As GUID) As Long
Private Declare Function CoCreateInstanceEx Lib 'OLE32' _
(rclsid As GUID, ByVal pUnkOuter As Long, _
ByVal dwClsContext As Long, _
pServerInfo As COSERVERINFO, ByVal cmq As Long, _
rgmqResults As MULTI_QI) As Long
Private Declare Function lstrcpyW Lib 'kernel32' _
(ByVal lpString1 As String, ByVal lpString2 As String) As Long
Public Function CreateObjectEx(ByVal Class As String, _
Optional ByVal RemoteServerName As String = '') As Object
Dim rclsid As GUID
Dim hr As Long
Dim ServerInfo As COSERVERINFO
Dim Context As Long
Dim mqi As MULTI_QI
mqi.piid = GlobalAlloc(GMEM_FIXED, 16)
' Convert the string version of IID_IDispatch to a binary IID.
hr = IIDFromString(StrConv(IID_IDispatch, vbUnicode), mqi.piid)
If hr <> 0 Then Err.Raise hr
' Convert the CLSID or ProgID string to a binary CLSID.
If ((Left(Class, 1) = '{') And (Right(Class, 1) = '}') And _
(Len(Class) = 38)) Then
' Create a binary CLSID from string representation.
hr = CLSIDFromString(StrConv(Class, vbUnicode), rclsid)
If hr <> 0 Then Err.Raise hr
Else
' Create a binary CLSID from a ProgID string.
hr = CLSIDFromProgID(StrConv(Class, vbUnicode), rclsid)
If hr <> 0 Then Err.Raise hr
End If
' Set up the class context.
If RemoteServerName = '' Then
Context = CLSCTX_SERVER
Else
Context = CLSCTX_REMOTE_SERVER
Dim MachineArray() As Byte
ReDim MachineArray(Len(StrConv(RemoteServerName, _
vbUnicode)) + 1)
ServerInfo.pwszName = lstrcpyW(MachineArray, _
StrConv(RemoteServerName, vbUnicode))