Opc.Ua.Com.ComUtils.CreateInstance1 C# (CSharp) Method

CreateInstance1() public static method

Creates an instance of a COM server.
public static CreateInstance1 ( System.Guid clsid, string hostName, UserIdentity identity ) : object
clsid System.Guid
hostName string
identity UserIdentity
return object
        public static object CreateInstance1(Guid clsid, string hostName, UserIdentity identity)
		{
			ServerInfo   serverInfo   = new ServerInfo();
			COSERVERINFO coserverInfo = serverInfo.Allocate(hostName, identity);

			GCHandle hIID = GCHandle.Alloc(IID_IUnknown, GCHandleType.Pinned);

			MULTI_QI[] results = new MULTI_QI[1];

			results[0].iid  = hIID.AddrOfPinnedObject();
			results[0].pItf = null;
			results[0].hr   = 0;

			try
			{
				// check whether connecting locally or remotely.
				uint clsctx = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER;

				if (!String.IsNullOrEmpty(hostName) && hostName != "localhost")
				{
					clsctx = CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER;
				}

				// create an instance.
				CoCreateInstanceEx(
					ref clsid,
					null,
					clsctx,
					ref coserverInfo,
					1,
					results);
			}
			finally
			{
				if (hIID.IsAllocated) hIID.Free();
				serverInfo.Deallocate();
			}

			if (results[0].hr != 0)
			{
                throw ServiceResultException.Create(
                    StatusCodes.BadCommunicationError, 
                    "Could not create COM server '{0}' on host '{1}'. Reason: {2}.", clsid, hostName, 
                    GetSystemMessage((int)results[0].hr, LOCALE_SYSTEM_DEFAULT));
			}

			return results[0].pItf;
		}