You can - but that's going to depend on having registered the COM object as out-of-process. Suppose you have a COM class in bob.exe. Register it with
regsvr32 /u /RegServer bob.exe. At that point, the COM classes in the assembly are registered to run out-of-process.
If you know the progid, you should be able to get a runtime instance of the object using:
Type bobType = Type.GetTyprFromProgId(bobProgId, true);
object bobObject = Activator.CreateInstance(bobType);
Then, to call the methods you should be able to do something like this:
string whoIsCodeProject = (string)bobObject.InvokeMember("WhatIsChrisReallyCalled", BindingFlags.InvokeMethod, null, bobObject, new object[] { 42 });
You can see that I'm calling a method and passing in a value of 42 because the COM method expects the magic H2G2 number.
Note, I've entered the code directly here from memory (to the technique), so there may be a minor error here or there.
Now, the question is, would I recommend doing this? Well no. There are so many other technologies that you could use. For strongly named connections, I like Protobuf and that would be my goto technology there. The only reason I would be using COM is if I were communicating with something that absolutely had to be COM.