这是C#Com服务器(使用Regasm注册):
[ComVisible(true), Guid("565D8202-6C0F-4AAB-B0F6-49719CD13045"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ITestObject
{
void DoSomething();
}
[ComVisible(true), GuidAttribute("21293767-A713-49E2-968E-7DDE0B0DAB94"),
ClassInterface(ClassInterfaceType.None)
]
public class TestObject : ITestObject
{
public void DoSomething()
{
}
}
这是C#COM客户端:
[ComImport(), Guid("565D8202-6C0F-4AAB-B0F6-49719CD13045"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITestObject
{
[PreserveSig]
void DoSomething();
}
问题在于:
Type type = Type.GetTypeFromCLSID(new Guid("21293767-A713-49E2-968E-7DDE0B0DAB94"));
object o = Activator.CreateInstance(type);
ITestObject t = (ITestObject)o;
对ITestObject的强制转换失败并出现InvalidCastException。但是可以将方法DoSomething()称为动态C#对象。
有没有人知道如何解决InvalidCastException?