Пример использования 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))

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


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

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

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