[英]Unable to cast object … to type
Visual Studio 2008(C#)为我的COM对象创建了Interop。 我使用的主要对象是: OPCHDAServerClass
, IOPCHDAItems
和OPCHDAItem
。 代码是:
OPCHDAServerClass server = new OPCHDAServerClass();
server.Connect("OPC.PHDServerHDA.1");
OPCHDAItem item = server.OPCHDAItems.AddItem("MyItem",1);
在第三行中, AddItem
方法应返回OPCHDAItem
。 AddItem
的互操作定义是:
[DispId(1610743813)]
OPCHDAItem AddItem(string ItemID, int ClientHandle);
我得到的例外是:
无法将“OPCHDAServerClass”类型的对象强制转换为“IOPCHDAItems”类型。
我不明白为什么我收到此错误消息。 server.OPCHDAItems
实现IOPCHDAItems
。 我不知道为什么服务器( OPCHDAServerClass
)被IOPCHDAItems
为IOPCHDAItems
?
我在python中进行了初始原型设计工作正常,所以我知道COM组件是有用的。 这是python代码:
server = win32com.client.dynamic.Dispatch("Uniformance.OPCHDA.Automation.1")
server.Connect("OPC.PHDServerHDA.1")
item = server.OPCHDAItems.AddItem("MyItem", 1)
有没有人看过类似的问题并知道一项工作?
看起来声明的属性类型OPCHDAItems
不是IOPCHDAItems
- 它是OPCHDAServerClass
。 C#是一种静态类型语言 - 除非明确告知,否则不会对COM接口进行类型转换,除非告知,否则它不会用于IDispatch。 改写如下:
server.Connect("MyServerName");
OPCHDAItem item = (server.OPCHDAItems as IOPCHDAItems).AddItem("MyItem",1);
编辑:先试试这个:
IOPCHDAItems Items = server.OPCHDAItems;
还是一样的错误? 怎么样
IOPCHDAItems Items = server.OPCHDAItems as IOPCHDAItems;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.