c# 自定义 com服务器 代码能够通过getobject获取到对象
以下是一个简单的示例代码,演示如何创建一个自定义 COM 服务器,该服务器可以通过GetObject方法获取到对象:
using System; using System.Runtime.InteropServices;
namespace MyComServer { [ComVisible(true)] [Guid("12345678-1234-1234-1234-123456789012")] public interface IMyObject { void DoSomething(); }
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("87654321-4321-4321-4321-210987654321")]
public class MyObject : IMyObject
{
public void DoSomething()
{
Console.WriteLine("MyObject.DoSomething()");
}
}
[ComVisible(true)]
[Guid("23456789-5678-5678-5678-345678901234")]
public class MyComServer
{
public object GetObject(string progId)
{
if (progId == "MyComServer.MyObject")
{
return new MyObject();
}
else
{
return null;
}
}
}
}
在上面的代码中,我们定义了一个名为MyObject的类,该类实现了IMyObject接口。我们还定义了一个名为MyComServer的类,该类有一个名为GetObject的方法。此方法接受一个字符串参数progId,该参数指定要获取的对象的程序标识符。如果progId等于"MyComServer.MyObject",则GetObject方法将返回一个新的MyObject对象;否则,它将返回null。
要使用此自定义 COM 服务器,您需要在注册表中注册它。您可以使用Regasm.exe工具来完成此操作,如下所示:
regasm MyComServer.dll /codebase
完成注册后,您可以使用以下代码从客户端应用程序中获取对象:
Type comServerType = Type.GetTypeFromProgID("MyComServer.MyComServer"); object comServer = Activator.CreateInstance(comServerType); object myObject = comServer.GetObject("MyComServer.MyObject"); IMyObject myObjectInterface = (IMyObject)myObject; myObjectInterface.DoSomething();
在上面的代码中,我们使用Type.GetTypeFromProgID方法获取MyComServer类的Type对象。然后,我们使用Activator.CreateInstance方法创建一个MyComServer对象。最后,我们使用GetObject方法获取一个MyObject对象,并将其转换为IMyObject接口。我们可以使用IMyObject接口调用DoSomething方法。
原文地址: https://www.cveoy.top/t/topic/bINc 著作权归作者所有。请勿转载和采集!