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