Пример использования CoCreateInstanceEx в Visual Basic - VB

Узнай цену своей работы

Формулировка задачи:

Подскажите ссылочку или примерчик по использованию CoCreateInstanceEx в Visual Basic. Или аналогичный классик в .NET -e. Заранее блогодарен.

Решение задачи: «Пример использования CoCreateInstanceEx в Visual Basic»

textual
Листинг программы
  1. Private Type GUID
  2. Data1 As Long
  3. Data2 As Integer
  4. Data3 As Integer
  5. Data4(7) As Byte
  6. End Type
  7.  
  8. Private Type COSERVERINFO
  9.    dwReserved1 As Long DWORD
  10.    pwszName As Long LPWSTR
  11.    pAuthInfo As Long COAUTHINFO*
  12.    dwReserved2 As Long DWORD
  13. End Type
  14.  
  15. ' A Visual Basic function named CreateObjectEx, which allows
  16. ' the user to create objects locally as well as remotely.
  17.  
  18. Private Type MULTI_QI
  19.    piid As Long     ' const IID*
  20.   pItf As Object   ' IUnknown*
  21.   hr As Long       ' HRESULT
  22. End Type
  23.  
  24. Enum CLSCTX
  25.    CLSCTX_INPROC_SERVER = 1
  26.    CLSCTX_INPROC_HANDLER = 2
  27.    CLSCTX_LOCAL_SERVER = 4
  28.    CLSCTX_REMOTE_SERVER = 16
  29.    CLSCTX_SERVER = CLSCTX_INPROC_SERVER + CLSCTX_LOCAL_SERVER + _
  30.                    CLSCTX_REMOTE_SERVER
  31.    CLSCTX_ALL = CLSCTX_INPROC_SERVER + CLSCTX_INPROC_HANDLER + _
  32.                 CLSCTX_LOCAL_SERVER + CLSCTX_REMOTE_SERVER
  33. End Enum
  34.  
  35. Private Const GMEM_FIXED = &H0
  36. Private Const IID_IDispatch As String = _
  37.        '{00020400-0000-0000-C000-000000000046}'
  38. Private Declare Function GlobalAlloc Lib 'kernel32' _
  39.       (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
  40. Private Declare Function GlobalFree Lib 'kernel32' _
  41.       (ByVal hMem As Long) As Long
  42. Private Declare Function IIDFromString Lib 'OLE32' _
  43.       (ByVal lpszIID As String, ByVal piid As Long) As Long
  44. Private Declare Function CLSIDFromString Lib 'OLE32' _
  45.       (ByVal lpszCLSID As String, pclsid As GUID) As Long
  46. Private Declare Function CLSIDFromProgID Lib 'OLE32' _
  47.       (ByVal lpszProgID As String, pclsid As GUID) As Long
  48. Private Declare Function CoCreateInstanceEx Lib 'OLE32' _
  49.       (rclsid As GUID, ByVal pUnkOuter As Long, _
  50.         ByVal dwClsContext As Long, _
  51.         pServerInfo As COSERVERINFO, ByVal cmq As Long, _
  52.         rgmqResults As MULTI_QI) As Long
  53. Private Declare Function lstrcpyW Lib 'kernel32' _
  54.       (ByVal lpString1 As String, ByVal lpString2 As String) As Long
  55.  
  56. Public Function CreateObjectEx(ByVal Class As String, _
  57.        Optional ByVal RemoteServerName As String = '') As Object
  58.  
  59.    Dim rclsid As GUID
  60.    Dim hr As Long
  61.    Dim ServerInfo As COSERVERINFO
  62.    Dim Context As Long
  63.    Dim mqi As MULTI_QI
  64.  
  65.    mqi.piid = GlobalAlloc(GMEM_FIXED, 16)
  66.  
  67.    ' Convert the string version of IID_IDispatch to a binary IID.
  68.   hr = IIDFromString(StrConv(IID_IDispatch, vbUnicode), mqi.piid)
  69.    If hr <> 0 Then Err.Raise hr
  70.  
  71.    ' Convert the CLSID or ProgID string to a binary CLSID.
  72.   If ((Left(Class, 1) = '{') And (Right(Class, 1) = '}') And _
  73.          (Len(Class) = 38)) Then
  74.       ' Create a binary CLSID from string representation.
  75.      hr = CLSIDFromString(StrConv(Class, vbUnicode), rclsid)
  76.       If hr <> 0 Then Err.Raise hr
  77.    Else
  78.       ' Create a binary CLSID from a ProgID string.
  79.      hr = CLSIDFromProgID(StrConv(Class, vbUnicode), rclsid)
  80.       If hr <> 0 Then Err.Raise hr
  81.    End If
  82.  
  83.    ' Set up the class context.
  84.   If RemoteServerName = '' Then
  85.      Context = CLSCTX_SERVER
  86.    Else
  87.       Context = CLSCTX_REMOTE_SERVER
  88.       Dim MachineArray() As Byte
  89.       ReDim MachineArray(Len(StrConv(RemoteServerName, _
  90.                          vbUnicode)) + 1)
  91.       ServerInfo.pwszName = lstrcpyW(MachineArray, _
  92.       StrConv(RemoteServerName, vbUnicode))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут