c# - C# COM 服务器和客户端因 InvalidCastException 而失败
问题描述
这是 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?
解决方案
推荐阅读
- azure-cosmosdb - Azure Cosmos DB 和 Azure 空间锚点有什么区别?
- javascript - 从“4.2.0”升级到“5.7.0”后 Dropzone 停止工作(使用 jquery“3.3.1”)
- dynamics-crm - Tibco Scribe 中的 Dynamics CRM 元数据未刷新
- javascript - 将新的用户数据添加到 div
- c# - 从返回具有某些属性的相同对象的 API 反序列化 JSON
- sql - 如何验证日期的格式为 YYYYMMDD
- python - 有没有更好的方法以更短的行抓取 MSFT 数据?我已经尝试过了,但得到的问题是“模块”对象不可调用
- python-3.x - 单击按钮时的Python PyQt5终端命令执行问题
- postgresql - postgreSQL & PL/pgSQL:varchar(36) 的值太长,但我昨天将字段扩大到 60
- android - RecyclerView 中的 NullPointerException