无法将对象...转换为类型

时间:2013-01-25 00:50:25

标签: c# com activex

Visual Studio 2008(C#)为我的COM对象创建了Interop。我使用的主要对象是:OPCHDAServerClassIOPCHDAItemsOPCHDAItem。代码是:

OPCHDAServerClass server = new OPCHDAServerClass();
server.Connect("OPC.PHDServerHDA.1");
OPCHDAItem item = server.OPCHDAItems.AddItem("MyItem",1);

在第三行中,AddItem方法应返回OPCHDAItemAddItem的互操作定义是:

[DispId(1610743813)]
OPCHDAItem AddItem(string ItemID, int ClientHandle);

我得到的例外是:

  

无法将“OPCHDAServerClass”类型的对象强制转换为“IOPCHDAItems”。

我不明白为什么我收到此错误消息。 server.OPCHDAItems实施IOPCHDAItems。我不知道为什么服务器(OPCHDAServerClass)被强制转换为IOPCHDAItems

我在python中进行了初始原型设计工作正常,所以我知道COM组件是有用的。这是python代码:

server = win32com.client.dynamic.Dispatch("Uniformance.OPCHDA.Automation.1")
server.Connect("OPC.PHDServerHDA.1")
item = server.OPCHDAItems.AddItem("MyItem", 1)

有没有人见过类似的问题,知道一项工作?

1 个答案:

答案 0 :(得分:0)

看起来声明类型的属性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;