Это C # Com Server (зарегистрирован с 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?