C# 托管COM服务器和COM客户端不能一起工作

C# 托管COM服务器和COM客户端不能一起工作,c#,com,C#,Com,我用C#编写了一个托管COM服务器和COM客户端。尝试使用此代码从COM客户端获取对COM服务器的引用时 Type comType = Type.GetTypeFromProgID("My.ComServer", true); object comObj = Activator.CreateInstance(comType); var comServer = (ComServer)comObj; 我获得了对新对象的引用,而不是对已注册服务器的引用。要注册COM服务器,我使用以下代码 new R

我用C#编写了一个托管COM服务器和COM客户端。尝试使用此代码从COM客户端获取对COM服务器的引用时

Type comType = Type.GetTypeFromProgID("My.ComServer", true);
object comObj = Activator.CreateInstance(comType);
var comServer = (ComServer)comObj;
我获得了对新对象的引用,而不是对已注册服务器的引用。要注册COM服务器,我使用以下代码

new RegistrationServices().RegisterTypeForComClients(
            typeof(ComServer),
            RegistrationClassContext.RemoteServer | RegistrationClassContext.LocalServer | RegistrationClassContext.InProcessServer,
            RegistrationConnectionType.MultipleUse);
另外,当我使用VB6客户端时,一切正常。问题发生在C#client上。
据我所知,这段代码不请求对windows中当前对象的引用,而只是创建一个新对象。如何替换此代码

Type comType = Type.GetTypeFromProgID("My.ComServer", true);
object comObj = Activator.CreateInstance(comType);
var comServer = (ComServer)comObj;

要获取对已注册COM服务器的引用?

这完全正常。“现有COM服务器”一词非常令人困惑,可能您指的是“现有COM对象”。但是现在完全不清楚你是怎么公布这个物体的存在的。向我们展示将其放入ROT的代码。对于在ROT中注册,我使用此代码,并在ComServer new RegistrationServices()中创建一个单例。RegisterTypeForComClient(typeof(ComServer),RegistrationClassContext.RemoteServer | RegistrationClassContext.LocalServer | RegistrationClassContext.InProcessServer,RegistrationConnectionType.MultipleUse);好的,我明白了。该调用通常由进程外服务器(EXE)进行。在.NET中支持较差但在VB6中很流行的场景。您是否真的运行了这样一个EXE并希望客户端连接到它?或者您希望客户端启动它吗?是的,我启动Com服务器并等待Com客户端的连接。如果我在VB6中使用com客户端,一切正常,但当我尝试从C#client连接到此服务器时,C#client会创建com服务器的新实例,并且已经运行的服务器不会从com客户端获取命令。客户端将必须使用CoGetClassObject()。您现在使用的不是普通的CoCreateInstance()。没有.NET的包装,谷歌“c#pinvoke cogetclassobject”找到合适的咒语。