Пример использования 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))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д